Prüfen ob Eingabe eine Zahl ist.



  • 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