Eingabe Aufforderung wird nicht bearbeitet.



  • Hallo zusammen ich versuche mich seit etwa 1 Woche an C++. Da ich ein gewisses Ziel haben muss an dem ich mich ausprobieren zu können, habe ich mir die Aufgabe gestellt ein Programm zu schreiben das mein Tank verhalten protokolliert und einige Statistiken erhebt. Nun bin ich soweit das ich Menge, Preis, und Art eingeben will. Unten im Code funktioniert soweit alles bis auf die Zeilen die mit einem Kommentar versehen sind.

    Dazu möchte ich noch sagen, ich versuche mich seid 1 Woche an C++ und programmiere so das ich das Verstehe dem entsprechend bitte ich um Nachsicht wenn das nicht der besten weg ist.

    int eingabe1() {
    	double Datum, Menge, Preis, Gesammt;
    	string Sorte;
    	cout << "Bitte gib das Datum des Tankvorganges ein!(TT/MM/JJJJ)\n";
    	cin >> Datum;
    	cout << "Bitte gib die nun die Tankmenge an! (z.B. 35.0)\n"; // Wird Zeitgleich mit Preis ausgeführt
    	cin >> Menge; // Man wird nicht aufgefordert die Menge einzugeben.
    	cout << "Bitte gib den Kraftstoff Preis ein! (z.B. 1.459)\n"; // Wird Zeitgleich mit Preis ausgeführt
    	cin >> Preis;
    	cout << "Bitte gib die Kraftstoff Sorte ein! (z.B. Super Benzin)\n";
    	cin >> Sorte;
    	cout << "Ausgabe: " << Datum << Sorte << " | " << Menge << " Liter |" << Preis << "Euro " << endl;
    	Sleep(3000);
    	return 0;
    }
    

    Wo liegt da der Fehler ?
    Ich hoffe ich könnt mir auf die Sprünge helfen.

    Freundlichen Gruß

    Mike



  • @Mike95 sagte in Eingabe Aufforderung wird nicht bearbeitet.:

    cout << "Bitte gib das Datum des Tankvorganges ein!(TT/MM/JJJJ)\n";
    cin >> Datum;

    Du hast oben "Datum" als double deklariert. Das ist also eine Zahl. Eine Zeichenkette der Form TT/MM/JJJJ ist keine Zahl. Daher wird hier der cin in einen Fehlerstatus gehen und weitere Eingaben werden sofort beendet bzw. gar nicht erst durchgeführt.*

    Siehe dir mal https://en.cppreference.com/w/cpp/io/basic_ios/clear an. Damit wird der Stream wieder in "guten" Status gesetzt. Wie du im Beispiel siehst, musst du dann aber noch deine falsche Eingabe entfernen (entweder mit readline wie im Beispiel oder mit https://en.cppreference.com/w/cpp/io/basic_istream/ignore (siehe ebenfalls verlinktes Beispiel)

    Definiere dein Datum einfach als std::string (korrekte Datumsbehandlung ist fortgeschrittener Kram, daher sollte für dich jetzt erstmal ein String ok sein).

    * genaugenommen liest cin so lange, wie es geht. Wenn du also 31/12/2019 eingibst, liest cin als double daraus die "31". Dein Datum ist also 31. Für die Menge bleibt dann der Reststring "/12/2019" übrig. Dieser ist keine Zahl. Dort tritt dann der Fehler auf.


Anmelden zum Antworten