PDA

Visualizza la versione completa : [C\C++] Funzione menu


zanardi84
05-10-2009, 18:29
Salve a tutti, posto per la prima volta in questo forum. Sto cercando di scrivere qualche funzione utile da usare in qualche semplice programma.

Sto cercando di implementare un menu che mi permette, dopo aver inserito la lettera corrispondente a quella suggerita, di attivare una particolare funzione (al momento però stampa solo una funzione).

Ecco il listato:

#include <cstdlib>
#include <iostream>
#include <ctype.h>
using namespace std;
void scelta();
int main(int argc, char *argv[])
{
scelta();
system("PAUSE");
return EXIT_SUCCESS;
}

void scelta()
{
int scelta;
cout<< "Digitare S per la somma"<<endl;
cout<< "Digitare D per la differenza"<<endl;
cout<< "Digitare M per la moltiplicazione"<<endl;
cout<< "Digitare <ctrl+z> per uscire"<<endl;

/* ripete finchè non si immette ctrl+z */
while ( ( scelta = getchar() ) != EOF ) {
getchar();
scelta=toupper(scelta); /* rende maiuscolo il carattere inserito. Includere a inizio programma ctype.h */
/* azione in base all'input */
switch ( scelta ) {

case 'S':
cout<<"somma"<<endl;
break; /*esce dallo switch */

case 'D':
cout<<"differenza"<<endl;
break; /* esce dallo switch */

case 'M':
cout<<"moltiplica"<<endl;
break; /* esce dallo switch */

case '\n': /* ignora gli a capo, */
case '\t': /* tabs, */
case ' ': /* spazi in input */
break; /* esce dallo switch */

default: /* tutti gli altri caratteri */
cout<<"Scelta non corretta. Ridigitare."<<endl;
break;
} /* fine switch */

} /* fine while */
} /* fine funzione */


Funziona abbastanza bene, nel senso che gestisce gli errori (o almeno mi sembra), ma se inserisco una ripetizione o 2 caratteri tra quelli suggeriti mi stampa entrambe le stringhe.
Esempio: se inserisco

ss mi stampa 2 volte somma.
sd mi stampa somma differenza.

Come posso fare in modo che prenda un solo carattere? Sarebbe meglio se controllasse subito.

Grazie

Loading