PDA

Visualizza la versione completa : [c] creare menu


jaso
04-12-2008, 18:27
buonasera,
vorrei creare un menu di scelta per il mio programma che dovrà svolgere alcune funzioni.

l'idea era la seguente

..
int selection;
do
{
switch(selection)
{
case 0:
go1();
break;
case 1:
go2();
break;
default:
error();
break
}
}while(exit!=-1);
}

il problema viene quando selection assume valori non interi.. es: se selection assumesse il valore diun carattere il programma entrerebbe in loop infinito.

come posso risolvere a questo?
esiste una funzione che dato in ingresso una variabile restituisca il suo tipo?

ciao

MrX87
04-12-2008, 18:37
bhè...pensandola in maniera molto semplice...basta usare i caratteri...ovvero dichiarare la variabile "selection" di tipo char...così non hai questo problema...perchè riesci a gestire sia i numeri(da 0-9 ) sia le lettere eventualmente anche tutti gli altri simboli...se poi vuoi qualcosa di più raffinato...puoi utilizzare "selection" come stringa...non so se mi sono spiegato e se la mia soluzione potrebbe esserti utile per il tuo problema...comunque se ci sono ancora dubbi...chiedi

jaso
04-12-2008, 18:41
grazie per la risposta,

avevo gia pensato a getchar(); utilizzandola nel seguente modo:

..
switch(getchar())
{
case 'a':

...
}

il problema sorge quando il controllo del programma viene passato a una sub function del main dove c'è un'altra getchar(); per un sub-menu.

quest'utlimo getchar(); non funziona ma non so perchè

MrX87
04-12-2008, 18:58
bhè in genere con la getchar() ( e comunque anche usando la scanf() leggendo char ) c'è sempre il problema che leggendo un carattere, automaticamente si legge anche il carattere del return ( \n ) che viene letto nel momento che si preme invio nella lettura...quindi devi provare a eliminare questo return...per esempio introducendo un'altra getchar()...
esempio:


int main ()
{
char selection;
do {
selection = getchar();
getchar();
switch(selection)
{
case 'a':
...
}
}
...}

allo stesso modo però dovresti fare nelle sub funciotn che vengono richiamate...

jaso
04-12-2008, 18:59
ti ringrazio,

provo subito

MrX87
04-12-2008, 19:03
de nada...poi posta se ci sei riuscito...

Loading