Wartet nicht auf die Eingabe beim String



  • Hey, ich hab folgendes Problem:
    Ich möchte hier eine Automarke als String eingeben. Allerdings wartet er nicht auf die Eingabe, sondern fährt gleich mit der Eingabe vom Baujahr weiter.
    Bei mir steht dann: "Bitte Marke eingeben: Bitte Baujahr eingeben:"
    Falls Notwendig reich ich auch die Header noch nach. Allerdings denk ich, dass das Problem irgendwo hier liegt. Vielen Dank für die Hilfe schonmal!

    #include <iostream>
    #include <vector>
    #include "Auto.h"
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	unsigned short wahl;
    	unsigned short baujahr1, leistung1, geschwindigkeit1, Anzahl;
    	vector<Auto> Wagen;
    	string marke1;
    	Auto temp;
    	test viel;
    	viel.iwas();
    
    	cout << &viel << endl;
    	cout << "Wie viele Wagen willst du anlegen: ";
    	cin >> Anzahl;
    
    	do {
    		cout << "Auswahl treffen\n";
    		cout << "-1- Autodaten eingeben\n";
    		cout << "-2- Autodaten ausgeben\n";
    		cout << "-3- Beenden\n";
    		cin >> wahl;
    
    		switch (wahl)
    		{
    		case 1:
    		{
    			for (size_t i = 0; i < Anzahl; i++)
    			{
                                    //Hier beginnt die Eingabe
    				cout << "Bitte Marke eingeben: ";
    				getline(cin, marke1);
    				temp.set_marke(marke1);
    				cout << "Bitte Baujahr eingeben: ";
    				cin >> baujahr1;
    				temp.set_baujahr(baujahr1);
    				cout << "Bitte Leistung eingeben: ";
    				cin >> leistung1;
    				temp.set_leistung(leistung1);
    				cout << "Bitte Hoechstgeschwindigkeit eingeben: ";
    				cin >> geschwindigkeit1;
    				temp.set_geschwindigkeit(geschwindigkeit1);
    				Wagen.push_back(temp);
    
    			}
    			break;
    		}
    		case 2:
    		{
    			for (size_t i = 0; i < Anzahl; i++)
    			{
    				cout << Wagen.at(i).get_marke() << endl;
    				cout << Wagen.at(i).get_baujahr() << endl;
    				cout << Wagen.at(i).get_leistung() << endl;
    				cout << Wagen.at(i).get_geschwindigkeit() << endl;
    			}
    			break;
    		}
    		default:
    			break;
    		}
    	} while (wahl != 3);
    	system("PAUSE");
    	return 0;
    
    }
    


  • Das ist ein übliches Problem bei Konsoleneingaben. Guck mal im Forum, hier wurde es bereits des öfteren beschrieben.



  • ok vielen Dank ^^



  • Also die Suche is ziemlich Erfolglos leider ;P Ich hoffe das einer so nett wäre, mir hier unter diesem Beitrag die Antwort zu schreiben



  • Könntest doch erstmal sowas wie ein dummy vorsetzen, der sozusagen die erste übersprungende eingabe abfängt. Dann kommt das auch alles hin. So mach ich das zumindest immer

    getline (cin,dummy);
    getline(cin, marke1);
    


  • cin >> wahl;
    

    führt dazu, dass Du eine Eingabe machen kannst. Du gibst eine Zahl ein. Damit das Programm wieder die Kontrolle bekommt, schließt Du die Eingabe mit der Enter-Taste ab.

    Im Eingabestrom steht nun die eingegebene Zahl und die Enter-Taste.

    cin >> wahl;
    

    liest aber nur die Zahl aus.
    Der nun folgende

    getline(cin, marke1);
    

    findet jetzt noch die Enter-Taste, mit der Du die vorherige Eingabe abgeschlossen hast, im Eingabestrom, speichert sie in marke1 und macht mit dem Programm weiter ...
    Du musst also vorher (vor dem getline) den Rest, der noch im Eingabestrom steht, konsumieren.


Log in to reply