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.