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.
-
elsebezieht sich immer auf das letzte davorstehendeifohneelse.if-else-ifkö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-ifzwischen 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 !!
