Falsche Berechnung und Neustart des Programms bei eingabe eines ungültiges Wertes



  • Hallo,

    danke für deine rasche Antwort. Fehler 1 ist nun behoben. Das Programm rechnet jetzt richtig.
    Bei Fehler2 weiß ich nicht wie ich das lösen soll. Wenn jemand einen Hersteller eingibt, welcher nicht 1,2 oder 3 ist dann soll erneut die Abfrage kommen geben Sie den Hersteller ein, solange bis 1,2 oder 3 eingegeben wird. Erst dann soll die Programmausführung fortsetzen.

    cout << "Bitte geben Sie den Hersteller ein:" << endl;
    cin >> Hersteller;

    if (Hersteller !=1 && Hersteller !=2 && Hersteller !=3) //Logische und Verknüpfung für die Eingabevalidierung
    {
    cout << "Sie haben einen ungueltigen Wert eingegeben - erlaubt ist die Auswahl 1,2 oder 3" <<endl;

    }

    else
    {

    if (Hersteller =1)
    {
    Preis= 1.50;
    cout << Gesamtpreis;
    }



  • Zeig doch mal den Origianl Code, wo man auch die Typen sieht.

    Und wenn du schon dabei bist, kannst du den Code gleich in die cpp-Tags packen. (unterhalb der Smileys hat es einen Button C/C++)



  • Du vergleichst die Variable "Hersteller" mit einer Ganzzahl, weist ihr aber einen Gleitkommazahlwert zu, wenn Hersteller = 1 ist. Mach Hersteller also float und frage so ab:

    switch( Hersteller )
    {
    	case 1.0:
    		Hersteller = 1.5f;
    		break;
    	default:
    		std::cout<<"Sie haben einen ungueltigen Wert eingegeben - erlaubt ist die Auswahl 1.0, 2.0 oder 3.0"<<endl;
    		break;
    };
    

  • Mod

    mitchandi schrieb:

    Bei Fehler2 weiß ich nicht wie ich das lösen soll. Wenn jemand einen Hersteller eingibt, welcher nicht 1,2 oder 3 ist dann soll erneut die Abfrage kommen geben Sie den Hersteller ein, solange bis 1,2 oder 3 eingegeben wird. Erst dann soll die Programmausführung fortsetzen.

    cout << "Bitte geben Sie den Hersteller ein:" << endl;
    do {cin >>  Hersteller;} while (Hersteller !=1 && Hersteller !=2 && Hersteller !=3);
    

  • Mod

    Kóyaánasqatsi schrieb:

    Du vergleichst die Variable "Hersteller" mit einer Ganzzahl, weist ihr aber einen Gleitkommazahlwert zu, wenn Hersteller = 1 ist. Mach Hersteller also float und frage so ab:

    switch( Hersteller )
    {
    	case 1.0:
    		Hersteller = 1.5f;
    		break;
    	default:
    		std::cout<<"Sie haben einen ungueltigen Wert eingegeben - erlaubt ist die Auswahl 1.0, 2.0 oder 3.0"<<endl;
    		break;
    };
    

    Wo bitte weist er Hersteller einen Gleitkommawert zu? Und seit wann kann man Gleitkommazahlen in switch verwenden?



  • Kóyaánasqatsi schrieb:

    Du vergleichst die Variable "Hersteller" mit einer Ganzzahl, weist ihr aber einen Gleitkommazahlwert zu, wenn Hersteller = 1 ist. Mach Hersteller also float und frage so ab:

    switch( Hersteller )
    {
    	case 1.0:
    		Hersteller = 1.5f;
    		break;
    	default:
    		std::cout<<"Sie haben einen ungueltigen Wert eingegeben - erlaubt ist die Auswahl 1.0, 2.0 oder 3.0"<<endl;
    		break;
    };
    

    Gerade erst aufgestanden? 😃



  • Hallo,

    anbei mein gesamtes Programm. Problem ist momentan noch dass das Programm 2 Dezimalstellen genau den Gesamtpreis und das Wechselgeld ausgeben soll und wenn ein Wert ungleich 1,2,3 eingegeben wird dass das Programm erneut nach dem Herstellerwert frägt:

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    //Erstellen der Klasse Eis
    class eis //Definition der Klasse 
    
    {
    
    //Definition der Attribute (Eigenschaften)  
    private: 
         int Menge, Hersteller; //Zuweisen des Datentyps int(Ganzzahl) zu den Variablen Menge und Hersteller
         float Preis, Gesamtpreis, Wechselgeld;  //Zuweisen des Datentyps float (geeignet für Währung und Dezimalstellen) für Preis, Gesamtpreis und Wechselgeld
    
    public:
         void eis_kaufen(); //Definition der Methode (void kein Rückgabedatentyp)
          };
    
    void eis::eis_kaufen() //Füllen der Methode eis_kaufen der Klasse eis mit Rechenoperationen
    
    {
    
    cout << "Welches Eis wollen Sie kaufen? " << endl;
    cout << "1)Capri Preis=1,50 EUR" << endl;
    cout << "2)Nogger Preis=1,80 EUR" << endl;
    cout << "3)Cornetto Preis=2,50 EUR" << endl;   
    cin >>  Hersteller;
    
    if (Hersteller !=1 && Hersteller !=2 && Hersteller !=3) //Logische und Verknüpfung für die Eingabevalidierung
    { 
                    cout << "Sie haben einen ungueltigen Wert eingegeben - erlaubt ist die Auswahl 1,2 oder 3" <<endl;
    
    }
     else
    {
    
    if (Hersteller ==1)
    {           
                  Preis= 1.50;
                  }
    
    if (Hersteller ==2)
    {         
                  Preis= 1.80;
                  }
    
        if (Hersteller ==3)
    {      
                  Preis= 2.50;
                  }      
    
    }
    
    cout << "Wieviel Eis wollen Sie von dieser Sorte kaufen?" << endl;   
    cin >> Menge;
        // Menge = 1;
         //Hersteller=2;
         Gesamtpreis = Menge*Preis;
         cout << "Der Gesamtpreis ist:" << endl;
         cout  << Gesamtpreis; 
         cout<<" EUR" << endl;
    
         Wechselgeld = 15 - Gesamtpreis;
    
         cout << "Ihr Wechselgeld ist:" <<endl;
    
         cout << Wechselgeld;
            cout<<" EUR" << endl;
    }
    
    int main(void) //Notwendig für C++, Hauptprogramm zum Starten
    {
    
    //cin >>  
    
    //Erstellung eines Objektes der Klasse Eis (Instanz der Klasse Eis)
    
      eis Kaufen; //Zuordnung des Objektes der Klasse Eis
      Kaufen.eis_kaufen(); //Ausführen der Methode  eis_kaufen mit dem Objekt Kaufen
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    


  • mitchandi schrieb:

    Problem ist momentan noch dass das Programm 2 Dezimalstellen genau den Gesamtpreis und das Wechselgeld ausgeben soll

    Sieh dir mal setprecision an...

    mitchandi schrieb:

    und wenn ein Wert ungleich 1,2,3 eingegeben wird dass das Programm erneut nach dem Herstellerwert frägt:

    Hast du diesen Thread nicht gelesen?? Du hast dafür schon eine Lösung präsentiert bekommen.



  • Hallo,

    bei mir funktioniert setprecision leider nicht:

    cout << setprecision(2) << Gesamtpreis;
    cout<<" EUR" << endl;

    Als Zahl wird trotzdem nur 1 Nachkommastelle ausgegeben!
    Leider hat die Switch-Case Anweisung im Thread zuvor auch nicht funktioniert.

    Könnt ihr bitte hierfür noch Tipps geben?

    Gruß Andreas


  • Mod

    mitchandi1 schrieb:

    Hallo,

    bei mir funktioniert setprecision leider nicht:

    Das muss noch mit fixed kombiniert werden.



  • Danke jetzt funktioniert es

    Dies ist die Lösung hierzu
    cout << setprecision(2) << setiosflags(ios::fixed) << Gesamtpreis;

    Jetzt habe ich nur noch 1 kleines Problem das ich vorhin schon beschrieben habe, ich will wenn bei Hersteller nicht 1,2,3 eingegeben wird, dass das Programm eine Meldung ausgibt sie müssen 1,2 oder 3 eingeben und anschließend erneut nach der Eingabe verlangt.



  • mitchandi1 schrieb:

    D
    Jetzt habe ich nur noch 1 kleines Problem das ich vorhin schon beschrieben habe, ich will wenn bei Hersteller nicht 1,2,3 eingegeben wird, dass das Programm eine Meldung ausgibt sie müssen 1,2 oder 3 eingeben und anschließend erneut nach der Eingabe verlangt.

    Nochmal: dazu wurde dir schon eine Lösung genannt. Lies den Thread doch bitte nochmal genau durch (erster Post von SeppJ).


  • Mod

    mitchandi1 schrieb:

    cout << setprecision(2) << setiosflags(ios::fixed) << Gesamtpreis;

    Das geht übrigens auch etwas kürzer:

    cout  << setprecision(2) << fixed << Gesamtpreis;
    

Anmelden zum Antworten