case-Anwendung in do-while Schleife



  • Hallo Community,

    ich versuche gerade eine Aufgabe von meinem Professor zu lösen und zwar geht es darum eine case-Anwendung so lange durchlaufen zu lassen bis der Benutzer diese abbrechen möchte. Das ganze soll mit einer do-while Schleife realisiert werden.

    Das Programm läuft bereits ohne Fehler, jedoch nicht so wie es sollte. Ich bin in diesem Gebiet noch Anfänger und hoffe darauf, dass ihr mir hierzu einen kleinen Tipp geben könnt.

    Hier der Code:

    #include <iostream>
    using namespace std;
    
    int main() 
    {
    
    //Deklaration der Variablen
    int auswahl;
    float netto;
    float brutto;
    
    //Deklaration von Mehrwertsteuerfaktor
    float de=1.19;
    float fr=1.2;
    float un=1.27;
    float lu=1.17;
    float at=1.2;
    do {
    cout<<" --------------------"<<endl;
    cout<<"|NETTO-BRUTTO_RECHNER|"<<endl;
    cout<<" --------------------"<<endl;
    cout<<"Hallo - Bitte geben Sie einen Nettobetrag ein"<<endl;
    cin>>netto;
    cout<<"Bitte wählen Sie ein Land, um den Bruttobetrag zu berechnen:\n"
    "1 - Deutschland\n"
    "2 - Frankreich\n"
    "3 - Ungarn\n"
    "4 - Luxemburg\n"
    "5 - Oesterreich\n"
    "---------------\n"
    "6 - Beenden\n";
    
    cin>>auswahl;
    
    switch(auswahl)
    {
    	case 1: 
    	{
    		brutto=netto*de;
    		cout<<"Der Bruttobetrag ist:"<< brutto << "Euro"<<endl;
    		break;
    	}
    
    	case 2:
    	{
    		brutto=netto*fr;
    		cout<<"Der Bruttobetrag ist:"<< brutto << "Euro"<<endl;
    		break;
    	}
    
    	case 3:
    	{
    		brutto=netto*un;
    		cout<<"Der Bruttobetrag ist:"<< brutto << "Euro"<<endl;
    		break;
    	}
    
    	case 4:
    	{
    		brutto=netto*lu;
    		cout<<"Der Bruttobetrag ist:"<< brutto << "Euro"<<endl;
    		break;
    	}
    
    	case 5:
    	{
    		brutto=netto*at;
    		cout<<"Der Bruttobetrag ist:"<< brutto << "Euro"<<endl<<endl;
    		break;
        }	
    
    	case 6:
    	{
    		break;
    	}
    
        default:
        	{
        	cout<<"Bitte geben Sie eine Ziffer zwischen 1-6 ein!"<<endl;
    		}
    }
    	}
    
    	while (auswahl !='6');
    
    	system("pause");
    	return 0;
    }
    

    Ich glaube der Fehler liegt im default oder in der while-Anweisung, wenn ich eine 6 für das Beenden des Programms eingebe springt das Programm wieder zum Anfang anstatt zu Beenden.
    Ich entschuldige mich schon mal für die Frage, da es sich bestimmt nur um einen kleiner Fehler handelt, ich komm jedoch nicht drauf wie ich es korrekt schreibe. 🙄

    Trotzdem schon vielen Dank im Voraus.

    Grüße,
    Max



  • Deine Variable auswahl ist ein int und kein char . Daher müssen die Anführungszeichen bei while(auswahl !='6'); weg.



  • 6 oder '6'?



  • Und schon hat es funktioniert, ich habe zuerst die doppelten Anführungszeichen geschrieben --> while (auswahl !="6");
    daraufhin ist ein Fehler aufgetreten und habe durch Recherche erfahren, dass ich sie durch einfache Anführungszeichen --> while (auswahl !='6') ersetzen musste. Danach lief das Programm ohne eine Fehlermeldung an, jedoch nicht benutzerfreundlich.

    Durch das Abändern zu while (auswahl !=6) funktioniert das Programm nun einwandfrei. Ich bedanke mich recht herzlich für die schnelle Hilfe!!!



  • Mir scheint, du weisst nicht, wo der Unterschied zwischen "6", '6' und 6 ist.

    "6" ist ein Stringliteral. Der Compiler bekommt die Adresse, an der das erste Zeichen steht.
    Das ist also ein char*. Darum der Fehler.

    '6' ist das Zeichen, das die Ziffer Sechs darstellt. Der Wert hängt vom verwendeten Zeichensatz/Code ab.
    Im gebräuchlichen ASCII wäre das 54. Das ist auch nur ein int , darum gab es keine Fehlermeldung.

    6 ist der Wert 6. Ein int .

    Durch das cin>>auswahl; wird, da auswahl ein int ist, die Ziffer in den richtigen Wert umgewandelt.
    Hättest du in dem Programm 54 eingegeben, dann hätte es auch funktioniert. (hätte, hätte, ...)



  • Ja, genau das war mein Problem. Wie gesagt ich bin Anfänger und nähere mich Schritt für Schritt der Programmiersprache. Nächstes mal weis ich was zu tun ist und mache diesen Fehler nicht mehr.


Log in to reply