Prüfen ob Eingabe eine Zahl ist.



  • Nachtrag: Das Hauptproblem besteht darin, dass ich eingegebene Buchstaben nicht abfangen kann, weil ich einen int auf die Eingabe gelegt habe.

    int length;
    
    	cout << "Wie oft soll die Taste emuliert werden?" << endl;
    	cin >> length; //Akzeptiert naürlich nur Ganzzahlwerte
    	cout << "\n";
    


  • dann mach es doch so

    int length;
    
        cout << "Wie oft soll die Taste emuliert werden?" << endl;
        cin >> length; //Akzeptiert naürlich nur Ganzzahlwerte
        if(!cin)
        { 
          //tue etwas, also fehlerbehandlung bei einer nicht eingabe von einer zahl
        }
        cout<<endl;
    


  • Hat sich erledigt. Hier die Lösung falls noch jemand so ein Problem haben sollte:

    int length;
    char buf[20];
    
    cout << "Wie oft soll die Taste emuliert werden?" << endl;
    	cin >> buf;
    
    	if(sscanf(buf, "%d", &length))
    	{
    		cout << "\n"; // Das steht da nur damit das Program einfach weiterarbeitet wie gewohnt
    	}
    	else
    	{
    		cout << "Ungueltige Eingabe" << endl;
    		cout << "\n";
    }
    


  • hallo,

    alles klar wennde selber drauf gekommen bist 😉



  • Verzweifelter Neuling 😞 schrieb:

    Hat sich erledigt. Hier die Lösung falls noch jemand so ein Problem haben sollte:

    Das ist keine Lösung, bestenfalls ein Workaround. Besser sieht es so aus:

    int length;
    
    cout << "Wie oft soll die Taste emuliert werden?" << endl;
    cin >> length;
    
    if(cin)//oder if(cin.good())
    {
      cout << "\n";
    }
    else
    {
      cout << "Ungueltige Eingabe" << endl;
      cin.clear();//Fehlerflags zurücksetzen
      cin.ignore();//die Falscheingabe aus dem Tastaturpuffer entsorgen
    }
    


  • CStoll schrieb:

    cin.ignore();//die Falscheingabe aus dem Tastaturpuffer entsorgen
    }
    

    Sicher, nich eher:

    std::cin.ignore( std::numeric_limits< std::streamsize >::max(), '\n' );
    


  • CStoll schrieb:

    Verzweifelter Neuling 😞 schrieb:

    Hat sich erledigt. Hier die Lösung falls noch jemand so ein Problem haben sollte:

    Das ist keine Lösung, bestenfalls ein Workaround. Besser sieht es so aus:

    int length;
    
    cout << "Wie oft soll die Taste emuliert werden?" << endl;
    cin >> length;
    
    if(cin)//oder if(cin.good())
    {
      cout << "\n";
    }
    else
    {
      cout << "Ungueltige Eingabe" << endl;
      cin.clear();//Fehlerflags zurücksetzen
      cin.ignore();//die Falscheingabe aus dem Tastaturpuffer entsorgen
    }
    

    Ja, das ist eindutig besser und auch übersichtlicher. Vielen Dank! 😃



  • David_pb schrieb:

    CStoll schrieb:

    cin.ignore();//die Falscheingabe aus dem Tastaturpuffer entsorgen
    }
    

    Sicher, nich eher:

    std::cin.ignore( std::numeric_limits< std::streamsize >::max(), '\n' );
    

    Beides ist "öfters" möglich. Das ignore() tuts bei mir auch komischerweise ganz gut 😉

    Dennoch bevorzuge ich das:

    string temp = "";
    getline(cin,temp);
    


  • Hm... ignore() ignoriert ja standardmäßig nur ein Zeichen. Bei mir (gcc) gings nicht, habs nochmal ausprobiert! 🙂



  • David_pb schrieb:

    ich eher:

    std::cin.ignore( std::numeric_limits< std::streamsize >::max(), '\n' );
    

    Da erhalte ich einmal den Fehler, dass es kein Element von std ist (obwohl es in der Autovervollständigung als solches angezeigt wird) und einmal, dass es ein nicht deklarierter Bezeichner ist!? 😕

    Muss ich da noch eine Header Datei includieren?



  • #include <limits>
    #include <iostream>
    


  • Ja:

    #include <limits>
    

    Edit: Zu spät 🙂



  • Der echte Fehler ist der signed Typ wenn nur positive Zahlen gewollt sind.

    Nimm unsigned (int) oder std::size_t.



  • David_pb schrieb:

    Hm... ignore() ignoriert ja standardmäßig nur ein Zeichen. Bei mir (gcc) gings nicht, habs nochmal ausprobiert! 🙂

    Ja, die ganze Geschichte mit ignore() etc ist für mich seltsam, nicht alles tut was es tun soll. Habe auch diesbezüglich schon Änderung des FAQ-Eintrags "Automatisches Schließen verhindern" gewünscht 😃 : http://c-plusplus.net/forum/viewtopic-var-t-is-183666.html


Anmelden zum Antworten