[c++] errore su switch
vorrei tanto sapere come mai e sopratutto
PERCHE' il seguente codice di programma va in crisi se nell'operazione di scelta metto un valore diverso da quelli prestabiliti, quindi entro in default.
La compilazione non mi da errori ma quando nel testare il programma metto un valore di default questo continua a
1- pulire lo schermo
2- a presentare il messaggio di default
e tutto questo all'infinito
(nei case ci sono chiamate a funzioni)
questo è il codice:
int main()
{
do
{
system("cls");
int scelta;
cout<<" Menu' "<
cout<<" 1- Inserisci un nome"<
cout<<" 2- Modifica un nome "<
cout<<" 3- Elimina un nome "<
cout<<" 4- Cerca un nome "<
cin>>scelta;
switch(scelta)
{
case 1:
inserimento_nome();
break;
case 2:
modifica_nome();
break;
case 3:
elimina_nome();
break;
case 4:
cerca_nome;
break;
default:
cout<<"Hai inserito un valore non coretto, scegli di
nuovo."<
break;
}
}while(scelta!=1&&scelta!2&&scelta!=3&&scelta!=4);
getch();
return 0;
}
PERCHE' il seguente codice di programma va in crisi se nell'operazione di scelta metto un valore diverso da quelli prestabiliti, quindi entro in default.
La compilazione non mi da errori ma quando nel testare il programma metto un valore di default questo continua a
1- pulire lo schermo
2- a presentare il messaggio di default
e tutto questo all'infinito
(nei case ci sono chiamate a funzioni)
questo è il codice:
int main()
{
do
{
system("cls");
int scelta;
cout<<" Menu' "<
switch(scelta)
{
case 1:
inserimento_nome();
break;
case 2:
modifica_nome();
break;
case 3:
elimina_nome();
break;
case 4:
cerca_nome;
break;
default:
cout<<"Hai inserito un valore non coretto, scegli di
nuovo."<
}
}while(scelta!=1&&scelta!2&&scelta!=3&&scelta!=4);
getch();
return 0;
}
Risposte
Così dovrebbe funzionare:
#include <iostream> #include <iomanip> using namespace std; int main() { char scelta; do { system("cls"); cout<<" Menu' "<<endl; cout<<" 1- Inserisci un nome"<<endl; cout<<" 2- Modifica un nome "<<endl; cout<<" 3- Elimina un nome "<<endl; cout<<" 4- Cerca un nome "<<endl; cin>>scelta; switch(scelta) { case '1': cout <<"inserimento_nome();" << scelta << endl; break; case '2': cout << "modifica_nome();" << endl; break; case '3': cout << "elimina_nome();" << endl; break; case '4': cout << "cerca_nome;" << endl; break; default: cout<<"Hai inserito un valore non corretto, scegli di nuovo." << endl; system("pause"); break; } } while(scelta!='1' && scelta!='2' && scelta!='3' && scelta!='4'); return 0; }
ho provato a compilare questo frammento di codice ma mi da un errore;
cmq a che serve "system(pause)")?
cmq a che serve "system(pause)")?
Che errore ti dà esattamente? Io uso Dev-C++ e compila.
L'istruzione system("pause") l'ho inserita per dare modo all'utente di leggere il messaggio di input errato, altrimenti il programma eseguirebbe subito la pulizia dello schermo. E' orribile come soluzione, ma era la meno invasiva sul tuo programma.
L'istruzione system("pause") l'ho inserita per dare modo all'utente di leggere il messaggio di input errato, altrimenti il programma eseguirebbe subito la pulizia dello schermo. E' orribile come soluzione, ma era la meno invasiva sul tuo programma.
"anonymous_be1147":
Che errore ti dà esattamente? Io uso Dev-C++ e compila.
L'istruzione system("pause") l'ho inserita per dare modo all'utente di leggere il messaggio di input errato, altrimenti il programma eseguirebbe subito la pulizia dello schermo. E' orribile come soluzione, ma era la meno invasiva sul tuo programma.
mi segnala errore nel comdando system("clas" strano perchè anche io uso dev
cmq mettendo un altro comando per pulire lo schermo non ripete l'esecuzione del menu e messaggio all'infinito ma cmq si ferma....
"Pablo1986":
mi segnala errore nel comdando system("clas" strano perchè anche io uso dev
system("clas")

"Pablo1986":
cmq mettendo un altro comando per pulire lo schermo non ripete l'esecuzione del menu e messaggio all'infinito ma cmq si ferma....
Cioè non fa quello che dovrebbe? Uhm... non so che dire, l'ho provato anche in Linux (cambiando le system() ) prima di postarlo, e sembrava funzionare.

"anonymous_be1147":
[quote="Pablo1986"]mi segnala errore nel comdando system("clas" strano perchè anche io uso dev
system("clas")

"Pablo1986":
cmq mettendo un altro comando per pulire lo schermo non ripete l'esecuzione del menu e messaggio all'infinito ma cmq si ferma....
Cioè non fa quello che dovrebbe? Uhm... non so che dire, l'ho provato anche in Linux (cambiando le system() ) prima di postarlo, e sembrava funzionare.

volevo dire "cls" scrivo veloce e sbaglio sempre.
cmq strano mi hanno detto che su borland non da problemi
allora è il mio pc che è impazzito non saprei. A me con la tua versione si ferma mostrandomi il messaggio di default
@Pablo
Anche per me il programma di Stan funziona.
Probabilmente, il problema deriva dalla non perfetta equivalenza delle librerie nei vari ambienti di sviluppo.
Prova a spostare prima dal ciclo la dichiarazione CHAR SCELTA; e correggere, nel tuo programma, il while, sostituendo !2 con !=2 (come ha già fatto Stan).
Ciao
Anche per me il programma di Stan funziona.
Probabilmente, il problema deriva dalla non perfetta equivalenza delle librerie nei vari ambienti di sviluppo.
Prova a spostare prima dal ciclo la dichiarazione CHAR SCELTA; e correggere, nel tuo programma, il while, sostituendo !2 con !=2 (come ha già fatto Stan).
Ciao

grazie mille, avevo dimenticato di sitemare una cosina.
Cmq mi potreste gentilmente dire il significato del frammento di codice
"using namespace std;" togliendolko il programma funziona comunque.
tempo fa avevo letto qualcosa sui namespace ma non capisco cosa sia std.
Ancora grazie mille a tutti e due
Cmq mi potreste gentilmente dire il significato del frammento di codice
"using namespace std;" togliendolko il programma funziona comunque.
tempo fa avevo letto qualcosa sui namespace ma non capisco cosa sia std.
Ancora grazie mille a tutti e due
using namespace std;
significa che i comandi
cin
cout
e non mi ricordo altri ora sorry
si riferiscono al namespace std
senza quello dovresti scrivere ogni volta
std::cout etc etc
std::cin etc etc
non so essere piu tecnico sorry
significa che i comandi
cin
cout
e non mi ricordo altri ora sorry
si riferiscono al namespace std
senza quello dovresti scrivere ogni volta
std::cout etc etc
std::cin etc etc
non so essere piu tecnico sorry
ma non basta la definizione della libreria iostream.h?????? se ho capito bene quello che intendi....
forse per la "vecchia" libreria iostream.h, con i vecchi compilatori, con quelli nuovi ci sono piu namespaces (libreria )
io in c++ se non metto using namespace std;
oppure riferisco i comandi al namespace std con std::cout o std::cin
g++ non me lo compila
io in c++ se non metto using namespace std;
oppure riferisco i comandi al namespace std con std::cout o std::cin
g++ non me lo compila
"superpunk733":
forse per la "vecchia" libreria iostream.h, con i vecchi compilatori, con quelli nuovi ci sono piu namespaces (libreria)
io in c++ se non metto using namespace std;
oppure riferisco i comandi al namespace std con std::cout o std::cin
g++ non me lo compila
ho provato a omettere
using nemaespace
e me lo compila cmq, cmq grazie mille ancora una volta
come ti ho gia detto, con le vecchie librerie e i vecchi compilatori non c'erano problemi. Prova a farlo con g++ dalla 4 in poi
"Pablo1986":
ho provato a omettere
using nemaespace
e me lo compila cmq
Come ha detto anche superpunk733 dipende da quanto è recente, "rigoroso" il tuo compilatore. Se includi gli header vecchi (per intenderci quelli terminanti con .h) allora puoi fare a meno di usare dichiarazioni oppure direttive d'using, altrimenti se usi quelli consigliati nello standard attuale del C++ devi usarle obbligatoriamente. I namespace sono un ottimo metodo per la programmazione modulare.

capito
grazie mille stan
grazie mille stan

