if/else und char Problem
-
Bla (wird in Kürze editiert)
-
Kann leider nicht editieren, wahrscheinlich weil ich keinen Benutzernamen habe.
Wie auch immer, hier der Code (die Frage kommt danach ^^):#include <iostream> using namespace std; int main(void) { int x; cout << "Wann hat der zweite Weltkrieg aufgehört? \n (Nur das Jahr eingeben)" << endl; cin >> x; if(x = 1945) { cout << "Das ist richtig!" << endl; } else if(x != 1945) { cout << "Falsch. Wiederholen? ( j / n )" << endl; char antwort = ' '; cin >> antwort; if (antwort == 'j') { return x; } if (antwort == 'n') { return 0; } } system("PAUSE"); return 0; }Mein Problem ist, dass der Code nach "else" einfach ignoriert wird und egal was ich für eine Antwort auf die erste Frage: "Wann hat der zweite Weltkrieg aufgehört?" eingebe, "Das ist richtig!" ausgegeben wird und das Programm dann mit "system("PAUSE");" fortsetzt.
Ich möchte gerne wissen wie ich das beheben kann und ob ich sonst was falsch mache...bedenkt bitte, ich bin blutiger Anfänger.

Danke im Vor-raus.
-
if(x == 1945)
Edit: Die etwas ausführlichere Antwort ist diese: Der Vergleichsoperator ist ==. Du hast mit if(x=1945) den Zuweisungsoperator = benutzt. Der hat der Variablen x den Wert 1945 zugewiesen und dadurch stand für die if-Anweisung nur noch sowas wie if(1945) da. Und da 1945 als "wahr" gewertet wird, wurde dann der Code ausgegeben der "Die Antwort ist richtig" anzeigt.
Da die erste if-Anweisung schon als richtig gewertet wurde, wurde der else if Ausdruck gar nicht erst ausgewertet. Aber selbst wenn der Ausdruck (x!=1945) überhaupt ausgewertet würde, wäre er nun immer "nicht wahr", da in der vorherigen if-Anweisung der Variablen x fälschlicherweise der Wert 1945 zugewiesen wurde.
-
*seufz* So ein kleiner Fehler...
Danke sehr für die Ausführliche Antwort.
Ich habe aber wieder ein Problem mit dem selben Code.
Wenn das Programm bei der Frage: "Nochmal versuchen? (j oder n)" angekommen ist und ich mit "j" antworte, beendet es sich einfach, ohne auf die Anfangsfrage zurückzukommen (return x).
-
nuttshell schrieb:
Ich habe aber wieder ein Problem mit dem selben Code.
Wenn das Programm bei der Frage: "Nochmal versuchen? (j oder n)" angekommen ist und ich mit "j" antworte, beendet es sich einfach, ohne auf die Anfangsfrage zurückzukommen (return x).Logisch. Du beendest die Funktion mittels return, und hast zudem auch keine Schleife in deinen Programm (Tip: do...while wäre wohl passend).
cu André
-
nuttshell schrieb:
*seufz* So ein kleiner Fehler...
Danke sehr für die Ausführliche Antwort.
Ich habe aber wieder ein Problem mit dem selben Code.
Wenn das Programm bei der Frage: "Nochmal versuchen? (j oder n)" angekommen ist und ich mit "j" antworte, beendet es sich einfach, ohne auf die Anfangsfrage zurückzukommen (return x).WTF?
Ich musste jetzt deinen Beitrag ein paar mal lesen, damit ich verstanden habe, was du meinst..
return beendet eine Funktion (auch main) und was du da angeben kannst ist der Rückgabewert. (bei main einen integer).
Du denkst aber, dass das ein Sprung ist..
Was du, zumindest meinst zu brauchen ist goto, nicht return..
(Obwohl auch hier eine Schleife besser wäre.)EDIT:
Du solltest dir die Grundlagen einmal zu gemüte führen..
-
drakon schrieb:
Was du, zumindest meinst zu brauchen ist goto, nicht return..
(Obwohl auch hier eine Schleife besser wäre.)Bitte drakon, erwähne goto niemals in der Nähe eines Anfängers. Er wird sonst versucht sein mit eben diesem zu arbeiten (Klassische Spagetti-Programmierung).
-
Danke für die Antworten

Du solltest dir die Grundlagen einmal zu gemüte führen..
Ja, das werde ich tun...es ist nur schwierig, alles zu behalten, wenn man nicht übt.

-
Also, ich hab mir die Schleifen nochmal genauer angeschaut, aber ich kriegs irgendwie nicht gebacken, diese auf Rückanweisungen zu übertragen, so wie das bei "goto" funktionieren könnte...ich finde auch keine richtigen Beispiele dafür...wenn ihr mir ein richtiges Beispiel zeigen könntet, wäre ich euch sehr dankbar.
-
nuttshell schrieb:
Bla (wird in Kürze editiert)
Ähm, was soll das? Wieso wartest du nicht, bis du den Beitrag fertig geschrieben hast?

nuttshell schrieb:
Also, ich hab mir die Schleifen nochmal genauer angeschaut, aber ich kriegs irgendwie nicht gebacken, diese auf Rückanweisungen zu übertragen, so wie das bei "goto" funktionieren könnte...ich finde auch keine richtigen Beispiele dafür...wenn ihr mir ein richtiges Beispiel zeigen könntet, wäre ich euch sehr dankbar.
Überleg dir einfach, wo das
gotohinspringen würde. Dann setzt du dort den Anfang der Schleife, und beim Punkt, wo du springst, benutzt du entweder einecontinueoderbreak-Anweisung.Besser wäre es natürlich, wenn man sich von Anfang an überlegt, wie Schleifen sinnvoll einzusetzen wären (nicht zuletzt, weil nicht jedes
goto1:1 in eine Schleife umzuwandeln ist).