Problem mit Bedingung (do-while-Schleife)



  • Hallo alle miteinander.

    Ich lerne im Moment C++ und soll einen Taschenrechner programmieren, der sich unter anderem so lange wiederholen soll bis der Benutzer mit der Eingabe 0 0 0 das Programm beendet.

    Nun wurde mir die do-while-Schleife beanstandet weil sie "grob falsch" wäre.

    Mein Problem:

    Bei mir kompiliert es ohne Probleme und macht auch genau das was es soll.
    (Ich benutze die aktuelle Version von dev-c++)
    Wenn ich die Bedingungen mit && verknüpfe (also rechentyp && wert1 && wert2!= 0) beendet sich das Programm schon wenn nur eine der drei Eingaben Null ist und nicht erst wenn alle drei Null sind.

    Suche schon seit Tagen im Netz und in Büchern aber nirgends etwas über Schleifen mit drei Bedingungen gelesen.

    Ist meine Formulierung der Bedingung falsch?
    Ist die Schleife überhaupt für so etwas geeignet?
    Warum funktioniert die Schleife wenn sie falsch ist?

    Über Denkanstösse, Tipps und eventuelle Zaunpfähle
    würde ich mich sehr freuen.

    #include <iostream>
    using namespace std;
    
    int main(){
    
    	int wert1, wert2, rechentyp;
    
    	do
    	{
    
    	cout << "Bitte geben Sie 3 Zahlen ein. Die erste bestimmt die    
    Rechenoperation." << endl;
    	cout << "Zum beenden des Programms 0 0 0 eingeben."                             << endl;
    	cout << "1 = Addition"                                                          << endl;
    	cout << "2 = Subtraktion"                                                       << endl;
    	cout << "3 = Multiplikation"                                                    << endl;
    	cout << "4 = Division mit Rest"                                                 << endl;
    	cout << "5 = Potenzieren"                                                       << endl;
    
    	cin >> rechentyp >> wert1 >> wert2;
    
    	switch(rechentyp)
    	{
    
         case 1:    
    	 cout << wert1 << " + " << wert2 << " = " << wert1+wert2 << endl;
         break;
    
         case 2:
    	 cout << wert1 << " - " << wert2 << " = " << wert1-wert2 << endl;
         break;
    
         case 3:    
    	 cout << wert1 << " * " << wert2 << " = " << wert1*wert2 << endl;
         break;
    
         case 4:     
      	 cout << wert1 << " / " << wert2 << " = " << wert1/wert2 << endl;
    	 cout << "Rest:" << wert1%wert2 << endl;
         break;
    
         case 5:     
         if(wert1>=0 && wert2>=0){
    		    int ergebnis=1;
    			for(int i=0; i<wert2; i++){			
    			ergebnis=ergebnis*wert1;			
    			}
    	 cout << wert1 << " hoch " << wert2 << "=" << ergebnis << endl;		
                }
         else if(wert2 < 0){
                wert2= -wert2;
                int ergebnis=1;
                for (int i=0; i<wert2; i++){
                ergebnis=ergebnis*wert1;
                }
         cout << wert1 << " ^ -" << wert2 << " = " << "1/" << ergebnis << endl;                
                }    
    	 break;
    
    	}
    }    while (rechentyp, wert1, wert2!= 0 );
    
    	 return (0);
    }
    


  • Sie ist ja auch grob falsch.

    Du musst die Werte einzeln mit Null vergleichen und diese Ergebnisse logisch verknüpfen.

    Bei while (rechentyp, wert1, wert2!= 0 ); benutzt du den Kommaoperator und von dem weißt du nicht was er macht.

    Und bei (rechentyp && wert1 && wert2!= 0) verknüpfst du die Werte von rechentyp mit wert1 mit dem Ergebniss von wert2!= 0

    Bedenke: 0 ist falsch und ungleich 0 ist wahr.

    Ein Buch (über C++) wäre sinnvoll.
    Aber nicht das Buch das du kostenlos im Internet findest.



  • Du hast doch aber die Bedingungen nicht mit && verknüpft!

    Lass mich raten, da stand vorher soetwas

    do {
     // ... 
    } while ( (rechentyp && wert1 && wert2 != 0 );
    

    Richtig?

    Lies dir das Kapitel noch mal durch.

    && Verknüpft Aussagen. Eine Ausage kann Wahr oder Falsch sein.

    wert != 0
    

    ist eine Ausage.

    wert1 != 0 && wert2 != 0
    

    ist ne UND Verknüpfung von zwei Aussagen.

    Alles klar soweit?


  • Mod

    DirkB schrieb:

    Aber nicht das Buch das du kostenlos im Internet findest.

    "Thinking in C++" ist aber ziemlich gut 😃



  • Vielen Dank!

    Macht Sinn was ihr sagt:)

    habe die zeile nun geändert in

    while (!(rechentyp == 0 && wert1 == 0 && wert2 == 0));
    

    und es funktioniert alles problemlos.

    Nochmals vielen Dank für die schnelle Hilfe!


Anmelden zum Antworten