__etnies__ - 30
Profi
(offline)
Dabei seit 11.2008
727
Beiträge
|
Geschrieben am: 30.08.2011 um 04:48 Uhr
Zuletzt editiert am: 30.08.2011 um 14:05 Uhr
|
|
Guten Morgen / Guten Abend,
ich habe folgendes Problem.
Und zwar bin ich gerade dabei mir ein kleines Programm zu schreiben.
Da mir nichts besseres eingefallen ist mache ich einen kleinen "Bewerbungstest" (ganz ganz einfach geamacht).
Nur. Vor dem Test muss man persönliche Daten eingeben. Funktioniert einwandfrei. Dann habe ich eine Abfrage gestellt mit der man entscheiden kann ob man den Test starten möchte oder nicht. Mit '1' startet man und mit '0' beendet man den Test.
Zitat: cout << "Wollen sie beginnen? " << endl;
cout << "[1] ja " << endl << "oder " << endl << "[0] nein " << endl;
cin >> start;
if (start == 1)
{
cout << "Los gehts! " << endl;
}
else
{
cout << "Falsche Eingabe" << endl;
return 0;
}
So schaut es aus. Wenn ich jetzt '1' eingebe kommt nur "Los gehts! " und dann beendet es die Konsole.
Warum??
Bei fragen Posten oder PM
Grüße
Michi
|
|
spark82 - 43
Halbprofi
(offline)
Dabei seit 11.2006
240
Beiträge
|
|
Geschrieben am: 30.08.2011 um 06:54 Uhr
|
|
Schaut eigentlich nicht schlecht aus.
Was steht denn in 'start'? Gib das doch mal aus.
Das schlimmste an Zensur ist XXXXXXXX XXXXXX.
|
|
scw - 42
Experte
(offline)
Dabei seit 09.2002
1836
Beiträge
|
|
Geschrieben am: 30.08.2011 um 07:19 Uhr
|
|
Starte mal einen Debugger, und schau, was in "start" drin steht. Ich denke mal, es steht nicht "1", sondern "1\n" drin
|
|
bredator - 41
Champion
(offline)
Dabei seit 03.2008
5319
Beiträge
|
|
Geschrieben am: 30.08.2011 um 07:21 Uhr
|
|
Ganz schlecht ist es schonmal, eine If-Verzweigung als Schleife zu bezeichnen. Denn das ist einfach falsch. Zudem sehe ich nicht, was dort falsch sein sollte. Es wird "Los geht's" ausgegeben, und da dann keine weiteren Anweisungen kommen, ist halt Ende Gelände und die Ausgabe wird beendet.
Lache nicht über jemanden, der einen Schritt zurück macht. Er könnte Anlauf nehmen.
|
|
scw - 42
Experte
(offline)
Dabei seit 09.2002
1836
Beiträge
|
|
Geschrieben am: 30.08.2011 um 07:24 Uhr
|
|
Zitat von bredator: Ganz schlecht ist es schonmal, eine If-Verzweigung als Schleife zu bezeichnen. Denn das ist einfach falsch. Zudem sehe ich nicht, was dort falsch sein sollte. Es wird "Los geht's" ausgegeben, und da dann keine weiteren Anweisungen kommen, ist halt Ende Gelände und die Ausgabe wird beendet.
Stimmt... hab wohl wegen der variable "start" nicht richtig gelesen Die Uhrzeit eben 
Aber hast recht. Das beschriebene Verhalten ist genau das, was auch im Source steht.
|
|
420-BBZ - 31
Champion
(offline)
Dabei seit 05.2011
2316
Beiträge
|
|
Geschrieben am: 30.08.2011 um 07:41 Uhr
|
|
Zitat von bredator: Ganz schlecht ist es schonmal, eine If-Verzweigung als Schleife zu bezeichnen. Denn das ist einfach falsch. Zudem sehe ich nicht, was dort falsch sein sollte. Es wird "Los geht's" ausgegeben, und da dann keine weiteren Anweisungen kommen, ist halt Ende Gelände und die Ausgabe wird beendet. so seh ich das auch
Battlelog: xFlomo
|
|
Nitek - 41
Champion
(offline)
Dabei seit 01.2003
4129
Beiträge
|
|
Geschrieben am: 30.08.2011 um 07:54 Uhr
|
|
Bin kein c++ Programmierer, aber cin dürfte dir nicht 1 oder 2 als Integer liefern, sondern deren ASCII Werte (weil deine Eingabe ein Character ist) - Dein if prüft also auf die falschen Werte.
Müsste doch eigentlich schon reichen, wenn du
start == '1'
schreibst.
|
|
spark82 - 43
Halbprofi
(offline)
Dabei seit 11.2006
240
Beiträge
|
Geschrieben am: 30.08.2011 um 08:19 Uhr
Zuletzt editiert am: 30.08.2011 um 08:25 Uhr
|
|
das passt schon, cin ist cool, und der >> Operator wandelt das direkt in den gewünschten Datentyp um, wenns geht.
Vorrausgesetzt start ist ein int, unsigned int, oder so was ähnliches.
@__etnies__: check das mal!
Das schlimmste an Zensur ist XXXXXXXX XXXXXX.
|
|
Nitek - 41
Champion
(offline)
Dabei seit 01.2003
4129
Beiträge
|
|
Geschrieben am: 30.08.2011 um 08:33 Uhr
|
|
Zum einen ist die Frage welchen Typen "start" hat, zum anderen auch, was nach dem If-Else-Block überhaupt passieren soll. Wenn "Los gehts" erscheint, dann ist müsste ja sogar schon alles richtig sein.
|
|
Run4Fun
Fortgeschrittener
(offline)
Dabei seit 02.2011
57
Beiträge
|
|
Geschrieben am: 30.08.2011 um 08:41 Uhr
|
|
Oh man. Eigentlich sollte der Begriff 'IF-Schleife' mit Strafpunkten belegt werden. Das ist eine bedingte Verzweigung. Wiederholt wird da ohne weiteres Kontrukt ganz sicher nichts,
Und solange start als Variable deklariert wurde, die einen nummerischen Wert aufnimmt, wird eben korrekt auch nach der Ausgabe 'Los geht's' beendet, weil im Programmbeispiel auch nichts mehr folgt und eben nirgends eine Schleife ist, die weitere Ein-/Ausgaben wiederholt.
Have some fun, join the run!
|
|
hop3l3ss - 35
Fortgeschrittener
(offline)
Dabei seit 03.2006
74
Beiträge
|
Geschrieben am: 30.08.2011 um 08:48 Uhr
Zuletzt editiert am: 30.08.2011 um 09:14 Uhr
|
|
so müsste es gehen wenn du in "test" deine funktion schreibst. die klammern bei der If abfrage könntest größtenteils noch weglassen jedoch würde ich es mit einer while schleife lösen die sollange anfragt bis sie eine "sinnvolle"(0 oder 1) eingabe bekommt.
Zitat:
void test(){
cout << "Los gehts! " << endl;
}
int main(){
int start = 0;
cout << "Wollen sie beginnen? " << endl;
cout << "[1] ja " << endl << "oder " << endl << "[0] nein " << endl;
cin >> start;
if (start == 1){ //aufruf programm
test();
}else if(start == 0){ //beenden programm
cout << "Programm wird geschlossen!" << endl;
}else{ //alle anderen Eingaben
cout << "Falsche Eingabe" << endl;
return 1;
}
return 0;
}
grüßle...
edit// natürlich ist if keine schleife aber ich gehe einfach mal davon aus, wenn er den code bis dahin schreiben konnte, dass er sich einfach ungeschickt ausgedrückt hat.
nobody knows...
|
|
Manu887 - 38
Fortgeschrittener
(offline)
Dabei seit 05.2006
58
Beiträge
|
|
Geschrieben am: 30.08.2011 um 11:20 Uhr
|
|
Wenn sich die Konsole am Ende nicht schließen soll, dann schreib einfach mal die folgenden Zeilen ganz unten in der main-Methode dazu:
cin.sync();
cin.get();
return 0;
|
|
Klischeepunk - 41
Champion
(offline)
Dabei seit 01.2005
8907
Beiträge
|
|
Geschrieben am: 30.08.2011 um 12:12 Uhr
|
|
Zitat von Manu887: Wenn sich die Konsole am Ende nicht schließen soll, dann schreib einfach mal die folgenden Zeilen ganz unten in der main-Methode dazu:
cin.sync();
cin.get();
return 0;
yip.
Die Konsole beendet sich, weil alles korrekt abgearbeitet wurde und dein Programm am ende ist. Ich nehm an du hast oben deine "Main" Methode gezeigt. Verwend nen Debugger und step das ding durch, du wirst sehn er verhält sich völlig korrekt und schließt eben die selbst geöffnete konsole, die nur zur Laufzeit exisitiert.
Nehm btw. an, dass du einen return nicht mit kopiert hast, weil SO compiliert das programm nicht (kein return, falls "if" true ist, void ausgeschloßen, da else "0" returnt).
umgehen lässt sich das indem du wie oben eben tastendruck verlangst, deine exe aus der Konsole ausführst (aufruf über programmname.exe) oder unter MS Systemen "System("PAUSE") verwendest, PAUSE ist ein Kommandozeilenbefehl der auf einen beliebigen Tastendruck wartet.
So long.
Dieser Post wurde 2 mal ROT-13 verschlüsselt.
|
|
Pratsch - 31
Champion
(offline)
Dabei seit 07.2009
2821
Beiträge
|
Geschrieben am: 30.08.2011 um 12:49 Uhr
Zuletzt editiert am: 30.08.2011 um 12:52 Uhr
|
|
Zitat von Nitek: Bin kein c++ Programmierer, aber cin dürfte dir nicht 1 oder 2 als Integer liefern, sondern deren ASCII Werte (weil deine Eingabe ein Character ist) - Dein if prüft also auf die falschen Werte.
Müsste doch eigentlich schon reichen, wenn du
start == '1'
schreibst.
Das Programm geht doch:
Zitat von __etnies__: So schaut es aus. Wenn ich jetzt '1' eingebe kommt nur "Los gehts! " und dann beendet es die Konsole.
Da er sonst nicht "Los gehts!" ausgeben würde, wenn er ja auf:
Zitat: if (start == 1)
{
cout << "Los gehts! " << endl;
}
prüft. : )
awa
|
|
ERROR404 - 35
Fortgeschrittener
(offline)
Dabei seit 05.2006
74
Beiträge
|
|
Geschrieben am: 30.08.2011 um 12:52 Uhr
|
|
Zitat: C++ - if-Schleife funktioniert nicht richtig
if-Schleife sagt schon alles aus!
www.bp-inter.net
|
|
Pratsch - 31
Champion
(offline)
Dabei seit 07.2009
2821
Beiträge
|
|
Geschrieben am: 30.08.2011 um 12:55 Uhr
|
|
Zitat von ERROR404: Zitat: C++ - if-Schleife funktioniert nicht richtig
if-Schleife sagt schon alles aus!
Kann passieren.
awa
|
|