if Anweisungen werden ausgeführt , else allerdings wird immer mit ausgeführt
-
Hallo erst mal , ich bin ein Neuling auf dem Gebiet der Programmierung .
Das wird man sicherlich an meinem code sehen .
Ich bitte hier bei dieser Aufgabe nicht um eine Lösung sondern vielmehr um eine erklärung warum das if - else konstrukt hier nicht funktioniert sondern einfach alles ausgeführt wird .
ich würde mich freuen wenn mir jemand nur diese eine Sache erklären kann , dankeschön.Ps.: Die Aufgabe selber lautet ausgeschriebene Zahlen in Ziffern auszugeben , ich dachte mir das dies am besten mit einer char in int umwandlung funktionieren würde aber ich scheitere irgendwie immer an der if - else kette hier und habe schon viele verschiedene ansätze versucht
#include"std_lib_facilities.h" int main() { cout << "Bitte geben Sie nur ausgeschriebene Zahlen ein\n\n"; char eingabe = 'eins'; cin >> eingabe; if (eingabe = 'eins') { eingabe = 49; cout << "eingabe gleich " << eingabe << endl; if (eingabe = 'zwei') { eingabe = 50; cout << "eingabe ist " << eingabe << endl; } } else cout << "fehler"; }
*edit : [Gelöst]
-
"char" ist ein einzelner Buchstabe. Du möchtest aber Zeichenketten, also std::string
-
In deinem if findet kein Vergleich, sondern eine Zuweisung statt.
-
Etwas in Hochkomma ist ein Zeichen. 'x'
Etwas in Anführungszreichen ist eine Zeichenkette. "Hallo"
Eine Zeichenkette hat mehr als ein Zeichen. Du kannst eine Zeichenkette also nicht in Hochkomma stecken.= ist eine Zuweisung. Du weist eingabe also einen Wert zu.
== ist ein Vergleich auf Gleichheit. Damit kannst du eingabe mit einem Wert vergleichen.
Den Fehler macht jeder Anfänger.
-
Mach Dich schlau, wie Du Deinen Compiler dazu bringst möglichst viele Warnungen auszugeben, wenn Du Mist baust.
char eingabe = 'eins';
Jeder(!) Compiler sieht, dass Du Dich da versehen hast und könnte eine Warnung ausgeben.
Bei der Zuweisung in den
if()
ist's genauso!
-
Danke danke !!
Ich hab den Wald vor lauter Bäumen nicht mehr gesehen und bin dabei auch noch viel zu kompliziert an das ganze herangegangen . Bedanke mich nochmal für die tollen Erklärungen !Nun funktioniert alles fast , allerdings habe ich nun noch immer das Problem das die else Anweisung hier immer mit ausgegeben wird , desweiteren werden die anderen if Anweisungen gar nicht geprüft .
ich schätze das ich eine Klammer oder alle nicht richtig setze aber es ist mir dennoch ein Rätsel.if (eingabe == "null") { cout << r << endl; if (eingabe == "eins") cout << z << endl; else if (eingabe == "zwei") cout << y << endl; if (eingabe == "drei") cout << x << endl; else if (eingabe == "vier") cout << f << endl; else cout << "fehlerhafte eingabe" << endl; }
-
Wenn eingabe == "null", koennen die anderen bedingungen, naemlich eingabe == "eins" normalerweise gar nicht wahr sein.
-
AngryAndi schrieb:
desweiteren werden die anderen if Anweisungen gar nicht geprüft .
Woher weißt du das?
Und ja, das kann durchaus sein, dass der Compiler die Tests wegoptimiert. Wie Marthog schon sagte können sie niemals wahr sein.
-
Hallo , nach dem ich nun ein paar sachen ausprobiert hab laufen alle anweisungen wie sie sollen wenn ich das entsprechende eintippe .
Allerdings fuchst mich diese else-Anweisung immer noch da sie egal welche nummer ich eintippe immer mit ausgeführt wird , und wenn ich irgendeinen Blödsinn eingebe kommt dafür garnichts und das geht mir einfach nicht ein.
laut der struktur müsste es doch nur ausgeführt werden wenn eine falsche eingabe erfolgt ?int main() { cout << "Bitte geben Sie nur ausgeschriebene Zahlen ein\n\n"; int r = 0; int z = 1; int y = 2; int x = 3; int f = 4; string eingabe = " "; cin >> eingabe; if (eingabe == "eins"){ cout << z << endl; } if (eingabe == "zwei"){ cout << y << endl; } if (eingabe == "drei"){ cout << x << endl; } if (eingabe == "vier"){ cout << f << endl; } if (eingabe == "null"){ cout << r << endl; } else cout << "falsche eingabe" << endl; }
-
AngryAndi schrieb:
laut der struktur müsste es doch nur ausgeführt werden wenn eine falsche eingabe erfolgt ?
nein, der else-Zweig wird ausgeführt, wenn die Eingabe != "null" ist. Das Else bezieht sich nur auf das if direkt davor. Du willst eine Menge "else if" haben.
-
else
bezieht sich immer auf das letzte davorstehendeif
ohneelse
.if-else-if
könnte sinngemäß wie folgt eingerückt werden. Da wird die Kaskade deutlich. Meist steht allerdings alles linksbündig - das ist auch übersichtlicher - jedenfalls wenn man weiß, dassif-else-if
zwischen Alternativen entscheidet.if (eingabe == "eins"){ cout << z << endl; else if (eingabe == "zwei") cout << y << endl; else if (eingabe == "drei") cout << x << endl; else if (eingabe == "vier") cout << f << endl; else if (eingabe == "null") cout << r << endl; else cout << "falsche eingabe" << endl;
-
Herrje danke euch sehr für eure hilfreichen Tipps ich habe es schlussendlich so wie furble wurble es beschreibt geschafft .
Mir war einfach nicht klar das sich das else nur auf das vorhergehende if bezieht und der hinweis mit den else if hat mich dann voran gebracht .
Nochmal vielen dank dafür !!