Frage bez?glich IfElse While (Anf?nger)
-
Hallo
Ich habe eine Frage und zwar:
Wenn ich bei "Eingabe" eine Zahl eingebe sei es 1,2,3 oder z.B 7 ,
dann passiert alles wie ich das wollte.
Aber wenn ich ein Buchstabe eingebe dann,dann werden die ganzen "cout" ausgegeben und das programm beendet.
es sollte aber eigentlich sofort beendet werden.
da es keine zuläsige eingabe ist.
warum ist das so?
und wie könnte ich denn Quellcode verbessern?
P.S:ist eine Übung aus dem [/url]http://de.geocities.com/throni3[/url] Tutorial.#include <iostream> #include <stdlib.h> using namespace std; int main(int argc, char *argv[]) { int Eingabe=0; char Wahl='J'; char Wahl1='n'; do{ cout<<"Herzlich willkomen zum meinem Quiz!\n\n\n\n"; cout<<"1.Frage: Wer ist der Bundeskanzler?\n\n"; cout<<"Ist es:\n\n"; cout<<"1:Gerhard Schr?der\n"; cout<<"2:Stefan Raab\n"; cout<<"3:Harald Schmidt\n"; cout<<"\nBitte geben sie jetzt 1 , 2 oder 3!"; cin>>Eingabe; if (Eingabe!=1) { cout<<"\nTja entwider liegen Sie falsch oder sie wollen mich\n" <<" verarschen und geben irgentwas ein , aber nicht das\n" <<" was Sie sollen!\n"; } else cout<<"\nJa das ist richtig!\n"; cout<<"\nWollen sie noch eine Frage?"<<"\nBitte geben Sie (J)a oder (N)ein ein!";cin>>Wahl; if(Wahl=='J'||Wahl=='j') { cout<<"\n\n2.Frage: Wie heisse ich?\n"; cout<<"\nIst es:\n"; cout<<"1:Gerhard Schr?der\n"; cout<<"2:Stefan Raab\n"; cout<<"3:Andrej\n"; cout<<"\nBitte geben sie jetzt 1 , 2 oder 3!"; cin>>Eingabe; if (Eingabe!=3) { cout<<"\n\nTja entwider liegen Sie falsch oder sie wollen mich\n" <<" verarschen und geben irgentwas ein , aber nicht das\n" <<" was Sie sollen!\n"; } else cout<<"\n\nJa das ist richtig!\n"; cout<<"\nWollen sie noch eine Frage?"<<"\nBitte geben Sie (J)a oder (N)ein ein!";cin>>Wahl; if(Wahl=='J'||Wahl=='j') { cout<<"\n3.Frage: Waren die Amerikaner im Jahre 1961 auf dem Mond?\n"; cout<<"\nIst es:\n"; cout<<"1:Ja\n"; cout<<"2:Nein\n"; cout<<"3:Kein Plan\n"; cout<<"\nBitte geben sie jetzt 1 , 2 oder 3!"; cin>>Eingabe; if (Eingabe!=2) { cout<<"\nTja entwider liegen Sie falsch oder sie wollen mich\n" <<" verarschen und geben irgentwas ein , aber nicht das\n" <<" was Sie sollen!\n"; } else cout<<"\nJa das ist richtig!\n"; cout<<"\nWollen Sie es vieleicht noch mal versuchen?"<<" (J)a oder (N)ein"; cin>>Wahl1; } } }while(Wahl1=='J'||Wahl1=='j'); cout<<"\n\nokey bis denn!\n\n"; system("PAUSE"); return 0; }
-
hi,
schreibe einfach dort, wo du eine falsche Antwort abfängst ein "break;" an das Ende des Blocks, dann springt er aus der "do...while"-Schleife.#include <iostream> #include <stdlib.h> using namespace std; int main(int argc, char *argv[]) { int Eingabe=0; char Wahl='J'; char Wahl1='n'; do{ cout<<"Herzlich willkomen zum meinem Quiz!\n\n\n\n"; cout<<"1.Frage: Wer ist der Bundeskanzler?\n\n"; cout<<"Ist es:\n\n"; cout<<"1:Gerhard Schr?der\n"; cout<<"2:Stefan Raab\n"; cout<<"3:Harald Schmidt\n"; cout<<"\nBitte geben sie jetzt 1 , 2 oder 3!"; cin>>Eingabe; if (Eingabe!=1) { cout<<"\nTja entwider liegen Sie falsch oder sie wollen mich\n" <<" verarschen und geben irgentwas ein , aber nicht das\n" <<" was Sie sollen!\n"; break; } else { cout<<"\nJa das ist richtig!\n"; } cout<<"\nWollen sie noch eine Frage?" <<"\nBitte geben Sie (J)a oder (N)ein ein!"; cin>>Wahl; if(Wahl=='J'||Wahl=='j') { cout<<"\n\n2.Frage: Wie heisse ich?\n"; cout<<"\nIst es:\n"; cout<<"1:Gerhard Schr?der\n"; cout<<"2:Stefan Raab\n"; cout<<"3:Andrej\n"; cout<<"\nBitte geben sie jetzt 1 , 2 oder 3!"; cin>>Eingabe; if (Eingabe!=3) { cout<<"\n\nTja entwider liegen Sie falsch oder sie wollen mich\n" <<" verarschen und geben irgentwas ein , aber nicht das\n" <<" was Sie sollen!\n"; break; } else { cout<<"\n\nJa das ist richtig!\n"; } cout<<"\nWollen sie noch eine Frage?" <<"\nBitte geben Sie (J)a oder (N)ein ein!"; cin>>Wahl; if(Wahl=='J'||Wahl=='j') { cout<<"\n3.Frage: Waren die Amerikaner im Jahre 1961 auf dem Mond?\n"; cout<<"\nIst es:\n"; cout<<"1:Ja\n"; cout<<"2:Nein\n"; cout<<"3:Kein Plan\n"; cout<<"\nBitte geben sie jetzt 1 , 2 oder 3!"; cin>>Eingabe; if (Eingabe!=2) { cout<<"\nTja entwider liegen Sie falsch oder sie wollen mich\n" <<" verarschen und geben irgentwas ein , aber nicht das\n" <<" was Sie sollen!\n"; break; } else { cout<<"\nJa das ist richtig!\n"; } cout<<"\nWollen Sie es vieleicht noch mal versuchen?" <<" (J)a oder (N)ein"; cin>>Wahl1; } } }while(Wahl1=='J'||Wahl1=='j'); cout<<"\n\nokey bis denn!\n\n"; system("PAUSE"); return 0; }
Wenn du das Programm gleich beenden willst, musst du die breaks durch returns ersetzen.
Frage wieso sind alle deine ö's,ä's,ü's usw. Fragezeichen?
Tschau Gartenzwerg
-
Frage wieso sind alle deine ?'s,?'s,?'s usw. Fragezeichen?
Ja das frage ich mich auch
das so im Browser
und wenn ich Programme die ich in Dev-C++ geschrieben habe auch so:(
Kann da einer helfen?schreibe einfach dort, wo du eine falsche Antwort abf?ngst ein "break;" an das Ende des Blocks, dann springt er aus der "do...while"-Schleife.
Ja das ist mir schon klar ,aber das funktioniert ja alles soweit.
nur wenn ich Buchstaben eingebe dann "st?rzt das programm ab.(also nicht wirlcklich abst?rzen,ich habe das ja oben schon beschrieben)kann man irgentwie vergleichen ob das eine Zahl oder Buchstabe ist?
aber bitte nicht mit funktionen a l? fstrginvf oder so .Die kenne ich leider noch nicht.
Danke
-
kann man irgentwie vergleichen ob das eine Zahl oder Buchstabe ist?
Ja, kann man auch ohne komplizierte Ansätze. Probiers mit
bool isdigit(char zeichen) //ist zeichen eine Zahl ? bool isalpha(char zeichen) //ist zeichen ein Buchstabe ?
Da das beides boolesche Funktionen sind, musst du dann nur auf 'true' oder 'false' prüfen, also z.B.
if(isdigit(zeichen)) { /* Wenn Zeichen eine Zahl ist, ist die Aussage in der Klammer = true, also werden die folgenden Anweisungen ausgeführt */ //Anweisungen ... }
Gruß
E-the-Real