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; };
-
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);
-
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
-
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).
-
mitchandi1 schrieb:
cout << setprecision(2) << setiosflags(ios::fixed) << Gesamtpreis;
Das geht übrigens auch etwas kürzer:
cout << setprecision(2) << fixed << Gesamtpreis;