Auf Integer prüfen



  • Wie kann man denn eine eingebene Zahl auf Integer überprüfen ?

    int eingabe;
    
    cout << "Integer eingeben: ";
    cin >> eingabe;
    
    if (cin.fail())
    ...
    

    Irgendwie läuft der trotzdem noch durch die Schleife durch, da in der nächsten Eingabe dann die Gleitpunktzahl ausgegeben wird...



  • welche schleife?



  • #include <iostream>
    #include <stdio.h>
    #include <limits>  // for numeric_limits, -> cin.sync()
    using namespace std;
    
    void wait()
    {
            cin.clear();
            cin.ignore(cin.rdbuf () -> in_avail () );
            cin.get();
    }
    
    void Eingabe()
    {
            int eingabe;
    
            cout << "Integer eingeben: ";
            cin >> eingabe;
    
            if (cin.fail())
                    throw 1;
            else
                    cout << "Ausgabe: " << eingabe << endl;
    }
    
    int main()
    {
            for (;;)
            {
                    try
                          Eingabe();
    
                    catch (int)
                    {
                            wait();
                            cin.ignore (numeric_limits<streamsize> :: max(), '\n');
                            cerr << "Kein Integer !" << endl;
                    }
            }
            wait();
            return 0;
    }
    


  • cin.fail() reagiert einmal zu spät...
    sorry, aber dazu fällt mir im moment nix mehr ein, als getline mit string und dann prüfen...



  • bool double_Test (const char *zeichen, int laenge)
    {
            int i = laenge;
    
            for (i = 0; i <= laenge; i++)
            {
                    if (zeichen[i] == 46)
                    {       return true;
                            break;
                    }
    
                    else
                            return false;
            }
    }
    ...
    char eingabe[10];
    
            cout << "Integer eingeben: ";
            cin.getline (eingabe, 10);
    
            if (double_Test (eingabe, 10))
    ...
    

    Wenn ichs so mach, gibt er alles aus. Hm 😃



  • die
    void Eingabe()
    {

    muss heisen
    void Eingabe() throw ( int )
    {



  • Hallo,

    einfach so:

    #include <iostream>
    using namespace std;
    
    int main()
    {
            int eingabe;
            if(cin >> eingabe)
                    cout << "ok" << endl;
            else
                    cout << "nicht ok" << endl;
    }
    

    BTW: Bei mir läuft dein Programm, zumindest wenn ich den Try-Block mit Klammern versehe. Ich verstehe dein Problem auch ehrlich gesagt gar nicht, was tut es denn was es nicht tun soll?



  • z.B. folgender Ablauf:

    Integer eingeben: 2
    Ausgabe: 2
    Integer eingeben: 5
    Ausgabe: 5
    Integer eingeben: 10.55
    Ausgabe: 10
    Integer eingeben: Kein Integer !
    Integer eingeben:

    Da gibt er noch die 10 aus und schreibt die catch-Anweisung in die Eingabe rein.

    (edit)
    Es ist immer noch so. Im Normalfall dürfte "Ausgabe: 10" nicht kommen und "Kein Integer !" müsste alleine stehen.
    Aber es klappt noch nicht wie gewünscht.



  • Lies dir das mal durch vllt. hilft es dir ja 🙂



  • Ja danke. Der Link hat mir sehr weitergeholfen.
    Jetzt funktioniert's.


Anmelden zum Antworten