Anfänger findet Fehler bei If Else Command nicht



  • Hallo Zusammen,

    Bin blutiger Anfänger und versuche mich grade testweise an If Else Gedönse.
    Habe auf Basis einiger Youtuberecherchen nun mein erstes Testprogramm erstellt, es macht aber nicht was es soll.

    Wollte den imaginativen User eine Zahl erraten lassen, tippt er richtig soll "Du hast gewonnen!" ausgespuckt werden, tippt er falsch, soll "Leider falsch!" ausgegeben werden.
    Ich kann aber jede beliebige Zahl eingeben und er spuckt immer "Du hast gewonnen!" aus.
    Wo liegt der Fehler?

    hier der betreffende abschnitt:

    int Raetsel;
    	cout <<"Gib jetzt eine Zahl zwischen 1 und 5 ein und bestätige mit enter!";
    	cout <<endl;
    	cin >>Raetsel;
    	if(Raetsel=5)	{
    		cout<<"Du hast gewonnen!";
    	}
    	else
    	{
    		cout<<"Leider Falsch!";
    		
    	}
    

    Ich bedanke mich schon mal im Voraus und wünsche ne entspannte Woche!



  • mach einfach aus dem "if(Raetsel=5)" ein "if(Raetsel==5)"

    durch das "==" wird es zu einer Zuweisung und schon klappt es.



  • @Ralle420

    Klappt tatsächlich, danke für die schnelle Antwort.
    Ergibt Sinn, im Beispielvideo hat er was mit >= gemacht, ging deswegen nicht davon aus dass man zwei Gleichzeichen braucht.
    Danke nochmal!

    Angenehme Nacht wünsch ich dir!



  • @Ralle420 sagte in Anfänger findet Fehler bei If Else Command nicht:

    durch das "==" wird es zu einer Zuweisung und schon klappt es.

    Du meinst es bestimmt richtig, aber erst durch == wird es zu dem gewünschten Vergleich, = ist die Zuweisung.

    Ab und zu hört man, dass man die Konstante besser links schreibt, sodass if(5=Raetsel) gar nicht erst kompiliert wird. Ich habe das allerdings nie gemacht (also in der Reihenfolge, den Fehler vermutlich schon).



  • Die wichtigste Lektion für dich, @Dieterstyx, sollte sein: schalte IMMER Warnungen deines Compilers ein. Compiler sind klug und erkennen oftmals unsauberen oder fragwürdigen Code automatisch. Nur: dein Code ist ja gültig (Zuweisung + Ergebnis der Zuweisung, also 5, auf bool testen), daher compiliert dein Code.

    Wenn du mit gcc oder clang arbeitest, nimm mindestens -Wall -Wextra als Switches, in VS /W4. Dann hätte dir der Compiler folgendes gesagt (am Beispiel clang):

    <source>:9:12: warning: using the result of an assignment as a condition without parentheses [-Wparentheses]
            if(Raetsel=5)   {
               ~~~~~~~^~
    <source>:9:12: note: place parentheses around the assignment to silence this warning
            if(Raetsel=5)   {
                      ^
               (        )
    <source>:9:12: note: use '==' to turn this assignment into an equality comparison
            if(Raetsel=5)   {
                      ^
                      ==