PDA

View Full Version : [C++]: Problema switch


robs05
04-01-2009, 16:34
Dato il seguente codice....



char scelta;
while(true)
{
cout << " \n1) funzione 1 ";
cout << " \n2) funzione 2 ";
cout << " \n3) funzione 3 ";
cout << " \n4) Esci\n" << endl;

cout << "Scegli: ";
cin >> scelta;

switch(scelta)
{
case '1':
d->funzione1();
break;

case '2':
d->funzione2();
break;

case '3':
d->funzione3();
break;

case '4':
exit(0);
break;

default:
cout << "Scelta non consentita" << endl;
break;
}
}


se al posto di inserire un numero inserisco una sequenza di caratteri, esempio: "asdfsd"

mi ripete per 6 volte (in questo caso dato che sono sei caratteri) l'elenco delle opzioni. Ovviamente perchè dallo standard di input legge 6 char....

come posso risovere questo problema?
in effetti se l'utente sbaglia ad inserire dati ed al posto del numero inserisce una stringa il programma dovrebbe ripetere una sola volta l'elenco delle opzioni....

saluti

darkestsky
04-01-2009, 19:43
Se a te interessa solo il primo carattere, al posto di switch(scelta) potresti mettere switch(scelta[0])

robs05
05-01-2009, 09:26
Già ho provato, mi da errore dicendo :
error: switch quantity not an integer

darkestsky
05-01-2009, 10:57
Giusto... forse potresti definire scelta come array di caratteri: per esempio char scelta[50] e poi fare lo switch su scelta[0]...

cionci
05-01-2009, 12:10
In ogni caso ci sarebbe il pericolo del buffer overflow.
Svuota lo stdin dopo la lettura di scelta:

string temp;
getline(cin, temp);

oppure

string scelta;
getline(cin, scelta);

switch(scelta.at(0))
{
....
}

robs05
05-01-2009, 12:41
grazie mille cionci, ho risolto