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 davorstehende if ohne else .

    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ß, dass if-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 !! 🙂 🙂 🙂 👍


Anmelden zum Antworten