Probelm bei do while Schleife



  • Hallo,
    ich bin neu sowohl bei C++ als auch hier im Forum. Ich habe mich an einem Programm versucht das ich als Hausaufgabe bekommen habe, jedoch habe ich ein Problem bei der do while Schleife. Das ist was ich genau machen muss:
    "Für n Materialien werden folgende Eingangsdaten gelesen:
    Name, Anfangsstock, Eingang und Ausgang. Wenn der eingegebene Ausgang größer ist als die Summe von Anfangsstock und Eingang soll eine Fehlermeldung erfolgen und ein neuer Wert für den Ausgang von der Tastatur gelesen werden. Dies erfolgt so lange bis man einen korrekten Wert eingibt, so dass Anfangsstock+Eingang-Ausgang>=0. Man berechnet den Endstock als Anfangsstock+Eingang-Ausgang."

    Meine do while Schleife macht jedoch nur einmal die Fehlermeldung, auch wenn ich danach noch eine Zahl angebe die dann die Bedingung Anfangsstock+Eingang-Ausgang>=0 erfüllt.

    Kann mir bitte jemand erklären wieso?
    Danke

    #include<iostream>
    #include<conio.h>
    #include<string>
    
    using namespace std;
    
    struct Materialien
    {
    	string name;
    	int aus, ein, as, end;
    };
    
    int main() 
    {
    	Materialien Mat[100];
    	int n;
    	cout<<"Geben Sie die Zahl der Materialien ein:"; cin>>n; 
    	for(int i=0;i<n;i++) 
    		{ 
    			cout<<"Name von Material "<<i+1<<" : ";cin>>Mat[i].name; 
    			cout<<"Anfangsstock: ";cin>>Mat[i].as; 
    			cout<<"Eingang: ";cin>>Mat[i].ein; 
    			cout<<"Ausgang: ";cin>>Mat[i].aus;
    
    			do{        
    						cout<<"ERROR"<<endl;
    						cout<<"Geben Sie einen neuen Ausgang ein: ";cin>>Mat[i].aus;
    
    				 }while((Mat[i].as+Mat[i].ein-Mat[i].aus)>=0);
    		} 
    
    	for(int i=0;i<n;i++) 
    		{ 
    			cout<<"Name von Material "<<i+1<<" : "<<Mat[i].name<<endl; 
    			cout<<"Anfangsstock: "<<Mat[i].as<<endl; 
    			cout<<"Eingang: "<<Mat[i].ein<<endl; 
    			cout<<"Ausgang: "<<Mat[i].aus<<endl;
    
    		}
    
    	_getch();
    	return 0;
    
    }
    


  • Eine do-while Schleife geht solange bis die Bedingung nicht mehr erfüllt ist.



  • Danke. Jetzt habe ich es geändert, jedoch wenn ein ERROR nicht nötig ist macht er es trotzdem ein mal. Warum ist das so? Ist mit der Reihenfolge etwas nicht in Ordnung?



  • Guck mal wann die Bedingung einer do-while Schleife geprüft wird 😉



  • Ich habs mit einer einfachen While Schleife probiert. Es funktioniert anscheinend. Werde aber noch weiter versuchen.
    Danke 🙂



  • Richtig, du solltest eine while-Schleife benutzen.


Anmelden zum Antworten