Ciao,
Ho l'impressione che tu abbia assunto un approccio sbagliato nei confronti del problema... cerca di suddividere la cosa nelle sue componenti e di separare l'I/O dalla parte grafica, può esserti d'aiuto questo semplice pseudocodice:
finito=false;
while(!finito)
{
disegna_menu();
scelta=input();
switch(scelta)
{
case 1: ...azione1();break;
case 2: ...azione2();break;
case QUIT: finito=true;break;
default:break;
}
}
In questo modo, nel caso si scelga di uscire dal programma si esce dal while, altrimenti si resta dentro ad un ciclo che disegna il menù ed attende un'operazione...
Se si inserisce un'opzione non acettabile si ottiene di ridisegnare il menù, niente vieta, invece del default:break; di scrivere qualcosa come default:mostra_messaggio();attendi_tasto();break;
NB: Non è un caso di ricorsione... fai molta attenzione, un menù implementato ricorsivo può avere effetti piuttosto deleteri (visto che l'utente può andare avanti e indietro con le scelte indefinitamente) ed esaurire lo stack molto velocemente.
Ciaociao