|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jan 2007
Messaggi: 112
|
[C++]: Problema switch
Dato il seguente codice....
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;
}
}
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 |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 90
|
Se a te interessa solo il primo carattere, al posto di switch(scelta) potresti mettere switch(scelta[0])
__________________
A day without laughter is a day wasted |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jan 2007
Messaggi: 112
|
Già ho provato, mi da errore dicendo :
error: switch quantity not an integer |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 90
|
Giusto... forse potresti definire scelta come array di caratteri: per esempio char scelta[50] e poi fare lo switch su scelta[0]...
__________________
A day without laughter is a day wasted |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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)) { .... } |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Jan 2007
Messaggi: 112
|
grazie mille cionci, ho risolto
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:04.



















