Du bist nicht eingeloggt.

Login

Pass

Registrieren

Community
Szene & News
Locations
Impressum

Forum / Bits und Bytes

C++ - if-Anweisung funktioniert nicht richtig

  -1- -2- vorwärts >>>  
__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 :-D
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

  -1- -2- vorwärts >>>
 

Forum / Bits und Bytes

(c) 1999 - 2026 team-ulm.de - all rights reserved - hosted by ibTEC Team-Ulm

- Presse - Blog - Historie - Partner - Nutzungsbedingungen - Datenschutzerklärung - Jugendschutz -