Frage zu einer Eingabe



  • Morgen wenn ich bei diesem Programm z.b. einen Buchstaben anstatt einer Zahll eingebe dann wird die ganze Zeit nur error ausgeben und ich kann keine neue Eingabe machen.

    Wie kann ich den Fehler mit einer exception oder so abfangen?

    int var;
    
    while(1)
    {
    cin>>var;
    
     if(var==1){
      cout<<"ok";
     }
     else{
      cout<<"error";
     }
    
    }
    


  • Verwende einen char zur Eingabe.

    #include <iostream>
    
    int main()
    {
    	for(;;)
    		{
    			char eingabe;
    			std::cin >> eingabe;
    			if(eingabe==1+'0') std::cout << "OK.\n";
    			else std::cout << "Falsche Eingabe.\n";
    		}
    }
    

  • Mod

    Skaselbat schrieb:

    Wie kann ich den Fehler mit einer exception oder so abfangen?

    Ja, du kannst mittels des Exceptionfeldes die Streams auch veranlassen, Exceptions zu werfen, anstatt "nur" in den Fehlerstatus zu schalten. Die Frage ist, wie du auf so eine Exception reagieren würdest? Deine Frage lässt nämlich darauf schließen, dass du über das beobachtete Verhalten überrascht bist. Der Stream cin wir hier nach gescheiterter Eingabeoperation (Zahl erwartet, Buchstaben bekommen) in einen Fehlerzustand gesetzt. Solange dieser nicht bereinigt wird, schlagen alle weiteren Aktionen auf dem Stream auch fehl und dein var ändert sich nie mehr. Anleitung wie das mit den Streams in C++ richtig und robust geht, findest du hier in so ziemlich jedem zweiten Thread, insbesondere jenen, in denen unser Streamexperte Werner Salomon etwas schreibt. Anscheinend gibt es da draußen sehr viele schlechte Tutorials und Bücher, die das Thema nie richtig behandeln, so dass dazu so viele Fragen kommen, die von mangelndem Grundverständnis zeugen.



  • Morgen wenn ich bei diesem Programm z.b. einen Buchstaben anstatt einer Zahll eingebe dann wird die ganze Zeit nur error ausgeben und ich kann keine neue Eingabe machen.

    Das Problem ist, das cin wie SeppJ nach einer falschen Eingabe in einen Fehlerzustand übergeht. Das kann man mit cin.fail() prüfen. Den Fehler setzt man mit cin.clear() zurück, danach muss man wohl noch den Eingabepuffer mit cin.ignore löschen.



  • Sup schrieb:

    Das Problem ist, das cin wie SeppJ nach einer falschen Eingabe in einen Fehlerzustand übergeht.

    Bist Du wirklich sicher, dass SeppJ nach einer falschen Eingabe in einen Fehlerzustand übergeht?

    SCNR



  • Belli schrieb:

    Sup schrieb:

    Das Problem ist, das cin wie SeppJ nach einer falschen Eingabe in einen Fehlerzustand übergeht.

    Bist Du wirklich sicher, dass SeppJ nach einer falschen Eingabe in einen Fehlerzustand übergeht?

    SCNR

    😃 👍


Log in to reply