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;
}