Problem mit cin



  • OK, ich muss euch mal wieder mit einem Thema belästigen, dass euch allen schon zum Hals raus hängt 😉 ... aber ich hab wirklich nichts gefunden ...

    Ich will einen Integer-Wert einlesen und will auch sicher gehen, dass es sich um eine Zahl handelt. das hab ich mir so gedacht:

    int zahl;
    do {
      cin >> zahl;
    } while (!cin.good());
    

    Das funktioniert auch, wenn eine Zahl eingegeben wurde. Wird aber etwas falsches eingegeben z.B. "abcdef", dann bleibt das Programm einfach stehen. Normal sollte er aber dann noch einmal neu einlesen, oder???

    EDIT: ich weiß, dass gerade zwei Threads vorher ein ähnlicher Thread war, das war aber mit scanf, und ich hätte gerne C++ verwendet...also *aufantwortwartend*

    Mfg, smasher1985

    [ Dieser Beitrag wurde am 07.04.2003 um 21:24 Uhr von smasher1985 editiert. ]



  • Das hatten wir zwar schon ca. 1 Milliarden mal und ich frage mich, nach was du gesucht hast, aber hier trotzdem mal ein Vorschlag:

    bool checkClearAndIgnore()
    {
        if (!cin)
        {
            cin.clear();    // Fehlerbits von cin zurücksetzen
            cin.sync();     // nur bei einigen gcc-Versionen nötig
            // vorhanden Zeichen im Eingabepuffer ignorieren
            cin.ignore(cin.rdbuf()->in_avail()); 
            return false;
        }
        return true;
    }
    int main()
    {
        int zahl;
        do 
        {   
            cout << "Bitte Zahl eingeben: ";
            cin >> zahl;
        } while (!checkClearAndIgnore());
    }
    

    PS: Der Name checkClearAndIgnore ist milde gesagt eine Frechheit. Es bleibt also deine Aufgabe dir da was passendes auszudenken. Gute Namen sind schließlich das A und O in der Programmierung.

    [ Dieser Beitrag wurde am 07.04.2003 um 23:36 Uhr von HumeSikkins editiert. ]



  • @Hume: Danke, dass du trotzdem geantwortet hast. Tut mir leid, wenn das schon so oft da war (ich hab's ja auch angekündigt 🙄 ) ... aber ich wußte auch nicht so richtig, nach was ich suchen sollte - wahrscheinlich lag's nur daran...

    Auf jeden Fall vielen Dank,

    Mfg, smasher1985


Anmelden zum Antworten