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.