|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2002
Città: Porto Sant' Elpidio (ap)
Messaggi: 789
|
[c++] odiatissimo buffer di input
Salve a tutti.
sono sull'orlo di una crisi di nervi. per quanto mi sforzi di rendere sicuro l'input da tastiera, arrivando a fare il controllo su ogni carattere, ogni tanto, apparentemente senza regole, mi si presentano situazioni tipo questa: Codice:
# 6 inserito: " 6 " Inserisci ID da cancellare # inserito: " 3 " la funzione che utilizzo per fare l'input è questa Codice:
int input::inputIntero(void)
{
int res;
char tempor;
cout << "# ";
char ris[20];
int i=0;
for(char s[20];!isdigit(s[0]);)
{
if(i!=0)
{
cout << "Errore: digita un numero intero\n# ";
}
tempor = getchar();
s[0] = tempor;
for(int j=1;tempor != '\n';j++)
{
tempor = getchar();
s[j] = tempor;
}
strcpy(ris, s);
i++;
}
res = atoi(ris);
#ifdef INPUTDEBUG
cout << "\ninserito: \" " << res << " \"" << endl;
#endif
return res;
}
utilizzo sempre e solo questa per qualsiasi input da console. ho provato fflush(stdin) ma non funziona
__________________
Abit aw9-d max, pentium code 2 duo E7300, sapphire radeon hd 4750, corasir 650W |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Se quello che volevi fare era evitare che il programma si impallasse inserendo una stringa al posto di un numero, allora puoi fare così:
Codice:
#include <iostream>
using namespace std;
int main()
{
int a;
while(1)
{
cin.clear();
cout << "Inserisci un numero: ";
cin >> a;
//se non ha fallito la lettura esco dal ciclo
if(!cin.fail())
break;
cout << "Devi inserire un numero intero" << endl;
//devo svuotare il buffer di ingresso
//prima lo rendo nuovamente valido
cin.clear();
//poi lo svuoto leggendo tutti i caratteri fino all'invio
while(cin.get() != '\n');
}
return 0;
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:55.



















