cin.sync(); cin.clear; funktioniert nicht!



  • Hallo zusammen,
    ich lerne gerade mit einem Buch C++. Am Ende des Kapitels 'Funktionen' sind nun übungsaufgaben. Ich soll eine inline-Funktion Max schreiben, die das Maximum von x und y zurückgibt und dann noch Max überladen durch eine weitere inline-Funktion für Argumente vom Typ char.

    Wenn ich beim Testen der ersten inline-Funktion statt einer Gleitpunktzahl ein Buchstabe eingebe dann kommt eine entsprechende Meldung und eigentlich solle es dann ungestört weitergehen. Das funktioniert aber nicht.

    ./209_2
    Geben Sie bitte zwei Zahlen ein.
    4
    g
    Fehlerhafte Eingabe!
    
    Geben Sie bitte zwei Buchstaben ein.
    b
    x = g ist das Maximum
    

    Hier ist der Code: was habe ich falsch gemacht?

    #include <iostream>
    using namespace std;
    
    inline double Max(double x, double y)
    {
    	return ((x < y) ? y : x);
    }
    
    inline char Max(char x, char y)
    {
    	return ((x < y) ? y : x);
    }
    
    int main()
    {
    	double x, y;
    	char xc, yc;
    	cout << "Geben Sie bitte zwei Zahlen ein." << endl;
    	if( cin >> x && cin >> y)
    	{
    	cout << (x == Max(x, y) ? "x = " : "y = ") << Max(x, y) << " ist das Maximum" << endl;
    	}
    	else
    	{
    	cout << "Fehlerhafte Eingabe!" << endl;
    	}
    
    	cin.sync(); cin.clear();			// Falls eine falsche Eingabe gemacht wurde.
    
    	cout << "\n\nGeben Sie bitte zwei Buchstaben ein." << endl;
    	if(cin >> xc && cin >> yc)
    	{	cout << (xc == Max(xc, yc) ? "x = " : "y = ") << Max(xc, yc) << " ist das Maximum" << endl;}
    	else
    	{	cout << "Fehlerhafte Eingabe!" << endl;}
    
    	return 0;
    }
    

    Vielen Dank.
    powerflo



  • cin.sync(); cin.clear(); // Falls eine falsche Eingabe gemacht wurde
    cin.ignore(numeric_limits<streamsize>::max(), '\n'); // Puffer löschen
    

    Außerdem, die char Funktion wird hier implizit gecastet falls du zum Beispiel ein int eingibst. Da int auf char und char auf int abzubilden ist.



  • Ach und ....
    #include <limits>

    habe ich vergessen.



  • Vielen Dank. Jetzt klappt es 🙂

    DeleteBuffer schrieb:

    Außerdem, die char Funktion wird hier implizit gecastet falls du zum Beispiel ein int eingibst. Da int auf char und char auf int abzubilden ist.

    Bin wie gesagt ein Anfänger. Muss ich das verstehen?

    DeleteBuffer schrieb:

    Ach und ....
    #include <limits>

    habe ich vergessen.

    Wieso? Es hat auch ohne funktioniert...

    Gruß
    powerflo


Anmelden zum Antworten