Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit Bedingung (do-while-Schleife)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.11.2012, 13:59 Uhr
~Andrej241
Gast


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.



C++:
#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);
}



Edit von ao: CPP-Tags repariert

Dieser Post wurde am 13.11.2012 um 08:30 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.11.2012, 15:43 Uhr
Tommix



Hallo
der Komma-Operator macht nicht, was Du zu glauben scheinst:
http://de.wikibooks.org/wiki/C-Programmierung:_Ausdr%C3%BCcke_und_Operatoren#Komma-Operator_.2C
Deine Bedingung funktioniert also nur manchmal. Man kann das verschieden formulieren, z.B.

C++:
while (!(rechentyp == 0 && wert1 == 0 && wert2 == 0));


Auf jeden Fall machst Du aus den drei Bedingungen zunächst mal eine (per logischer Verknüpfung). Die wird dann ausgewertet. Eine spezielle Schleife mit mehreren Bedingnungen braucht man nicht.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: