cin -> Falscheingabe: Absturz verhindern?



  • aha?



  • int var;
    if (!(std::cin >> var))
    { std::cerr << "FEHLER: Falsche Eingabe!" << std::endl; return false; }
    

    sollte doch problemlos gehen ...



  • Hi und Sorry,

    ich hab deinen Code bei mir ausgefuehrt (gentoo linux, gcc 4.1.1), denn der Code kam mir eigentlich richtig vor. Und bei mir laeuft er auch. Hier mein Code und ein paar "Eingabe-Ausgaben".

    #include <iostream>
    using namespace std;
    int main() {
      int var;
      if(!(cin >> var))
        {cout << "Fehler" << endl;}
      else
        {cout<<var<<endl;}
    }
    
    3.32 --> 3
    3aqd --> 3
    adfa --> Fehler
    #@Q#$ --> Fehler
    usw.
    

    Kannst du genauere Angaben zu deine Plattform machen? Bzw. mal den kompletten Code von dir posten, falls du Code hast, der nicht hundertprozent so aussieht.



  • @(D)evil ... denk ich mir auch ^^

    @Kohma
    wieso denn Sorry? 😕

    Ich fahre mit Vista x64, und dem MinGW (Version unbekannt, steht nirgends) Compiler.

    Der obrige Code, ist bereits der Komplette 😃 - Zumidnest bis auf's include und using.



  • Hhm,

    wenn das so ist, dann kann ich mir das auch nicht erklaeren. Kriegst du denn ne bestimmte Fehlermeldung oder verabschiedet sich das prog lautlos?

    Hast du vielleicht ne 32-Bit Version des Compilers? Das koennte fuer alle moeglichen komischen Fehler als Erklaerung herhalten.

    Und ich sagte sorry, weil der Code eigentlich funktioniert 🙂



  • Ich nehme an, dass es ein 32Bit Compiler ist, aber eigentlich werden 32Bit gut emuliert. Na ja ... ich glaub ich gewoehn mich wieder an Ubuntu ... da gabs nie Probleme ^^

    Danke an euch alle, ausser nedem_b 😉



  • #include <iostream>
    
    int main() 
    {
        int var(0);
    
        if (!(std::cin >> var))
        {
            std::cerr << "FEHLER: Falsche Eingabe!" << std::endl; 
            return 1; 
        }
    
        std::clog << var << std::endl;
    }
    

    wnen das nicht geht, dann ka ^^ Du darfst std::cin danach natürlich nicht weiter nutzen, wenn einmal was falsches eingegeben wurde, es sei denn du sorgst dafür, das es weg kommt 😉

    #include <iostream> // std::istream
    #include <limits> // std::numeric_limits<>::max()
    
    std::istream& clear_stream(std::istream& in) { return in.clear(), in.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
    

    ...



  • @Dizzy.w3
    Bist du sicher, dass es sich um einen Absturz handelt? Wenn ja, wie äußert sich dieser? Allgemeine Schutzverletzung?
    Oder schließt sich vielleicht einfach nur die Konsole? Völlig kommentarlos.

    Achso, und was passiert hier:

    #include <iostream>
    int main() {
       std::cout << "Hello World..." << std::endl;
    }
    


  • Wie wäre es mit Exceptions???



  • vielleicht würde ein std::cin.get(); bringen, benutz ich selber:

    #include <iostream>
    int main() 
    {
       std::cout << "Hallo!" << std::endl;
       std::cin.get();
       return 0; // Optimal
    }
    


  • Hauptsache mal was schreiben ... vllt dann auch aufn Kontext achten und es hilft weiter 😉


Anmelden zum Antworten