Ho un problema che, dopo molti test, penso che sia dovuto a me non capire come funziona il buffer di input.C - ciclo di do/while basato sull'utente che non funziona correttamente
Ho un ciclo while che dovrebbe continuare a iterare finché l'utente non digita "no" per interrompere l'iterazione.
Ho due problemi.
- La mentre non smette mai di scorrere indipendentemente l'utente inserisce "no" o ciò che non è uguale a "sì"
- Come si può vedere l'uscita al secondo ciclo ha un problema. Il programma non chiede all'utente di inserire una stringa e saltare questo passaggio, come l'utente digita semplicemente INVIO.
CODICE:
int foo = 0;
do{
int i, cycles;
char array[MAX_LENGTH+1];
for(cycles=0; cycles < MAX_READ_CYCLES; cycles++){
i=0;
printf("\n\nEnter a string: ");
char ch;
while ((ch = getchar()) != '\n' && ch != EOF) {
array[i] = ch;
i++;
}
array[i] = '\0'; //string terminator
printf("String you entered: %s\n", array);
printf("\nDo you want to continue? 1: yes/0: no \n");
scanf("%d", &foo);
}
} while(foo == 1);
OUTPUT
Enter a string: test
String you entered: test
Do you want to continue? 1: yes/0: no
0
Enter a string: String you entered:
Do you want to continue? 1: yes/0: no
3
Enter a string: String you entered:
Do you want to continue?
Prova questo: 'fflush (stdin)' dopo l'output della stringa inserita. – Mxsky
Sfortunatamente non funziona ancora correttamente anche se inserisco un 'fflush (stdin)'. Inoltre mi è stato detto di evitare l'uso di fflush (stdin) perché ha un comportamento indefinito. – fbid
Ecco la tua risposta: http://stackoverflow.com/questions/16908008/scanf-getchar-working-correctly-only-first-time-through-loop – Mxsky