Ciao a tutti,
Osservate questo semplice codice:
codice:int main() { char v_scelta; int a; printf(" MENU''"); printf( "\n" ); printf (" 1 - Somma"); printf( "\n" ); printf (" 2 - Sottrazione"); printf( "\n" ); printf (" 3 - Moltiplicazione"); printf( "\n" ); printf (" 4 - Divisione"); printf( "\n" ); Etichetta_1: scanf ("%c", &v_scelta); if ((v_scelta != '1') && (v_scelta != '2') && (v_scelta != '3') && (v_scelta != '4')) { printf (" ERRORE: Scelta errata!"); printf ( "\n" ); goto Etichetta_1; } system ("PAUSE"); return 0; }
Lo scopo del programma è fornire all'utente un menù che gli consenta di scegliere una delle 4 operazioni aritmetiche. Ma se l'utente dovesse inserire un valore di MENU' inesistente si vuole fare in modo che il programma segnali l'errore e metta l'utente in condizione di fornire un nuovo valore in input.
Se il codice viene eseguito il compilatore stampa a video il menù e resta in attesa dell'input dell'utente come previsto dall'istruzione SCANF.
Se si prova a fornire in input un valore maggiore di 4. (ad esempio 6) il risultato ottenuto è questo : risultato.png
Perchè il messaggio d'errore compare 2 volte ?
Perchè la seconda volta che viene eseguito SCANF il compilatore non attende l'INPUT utente ?
Anche DEBUGGANDO non sono riuscito a capire perchè SCANF non attende che venga immesso un nuovo valore. A mio parere l'ideale sarebbe resettare la variabile V_SCELTA con un istruzione di "CLEAR", ma da quanto ho capito questo in C non è possibile ! E' vero che in C non posso resettare una variabile ?
Grazie.

