Il codice presentato contiene una silloge delle peggiori violazioni alle più basilari regole di engineering ed economia del sorgente inerenti il linguaggio C. L'istruzione goto è pesantissimamente deprecata, oltreché sostanzialmente inutile nel 99% del codice del real world. Anche la scanf() è deprecata, mentre l'invocazione di funzioni di sistema per l'attesa di un tasto è semplicemente una bestemmia.
Le invocazioni multiple di printf() per la mera stampa di costanti di testo sono altamente inefficienti ed assolutamente evitabili.
Lo stesso concetto di "reset di una variabile" è decisamente avulso dal contesto dell'informatica applicativa: al limite si può parlare di ripristino di un default, o di azzeramento di una variabile.
Una versione banalmente scolastica e incompleta, ma certamente più accettabile, del codice in oggetto potrebbe avere la seguente forma:
codice:#include <stdio.h> void kbd_clean() { register char ch; while (((ch = getchar()) != '\n') && (ch != EOF)); } int main(void) { char v_scelta; char done = 0; puts(" MENU'\n" " 1 - Somma\n" " 2 - Sottrazione\n" " 3 - Moltiplicazione\n" " 4 - Divisione\n"); while (0 == done) { scanf ("%c", &v_scelta); kbd_clean(); if (NULL == strchr("1234", v_scelta)) { puts(">> ERRORE: Scelta errata o inesistente!\n"); } else { done = 1; } } return 0; }