Vecchia Spugna
21-05-2007, 22:01
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:
# 6
inserito: " 6 "
Inserisci ID da cancellare
#
inserito: " 3 "
dove ciò che segue # è l'input che il programma si aspetta. come potete vedere non ho dato nessun input e il programma ha preso arbitrariamente "3" senza che io digitassi niente.
la funzione che utilizzo per fare l'input è questa
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
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:
# 6
inserito: " 6 "
Inserisci ID da cancellare
#
inserito: " 3 "
dove ciò che segue # è l'input che il programma si aspetta. come potete vedere non ho dato nessun input e il programma ha preso arbitrariamente "3" senza che io digitassi niente.
la funzione che utilizzo per fare l'input è questa
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