wie auf tastendruck warten?



  • ka obs das ist was Du suchst...

    schau mal:

    if (!cin)
    	{
    		cin.clear();
    		cin.ignore(cin.rdbuf()->in_avail());
    		cout << "\a\nUng" << "ltige Eingabe!\n";
    	}
    


  • Also der Code

    cin.clear(); 
    cin.ignore(cin.rdbuf()->in_avail());
    cin.get();
    

    funktioniert bei mir nicht. Wenn ich 3 oder 4 Zeichen eingebe (oder mehr), liefert
    mir cin.rdbuf()->in_avail() immer 0 😕

    mfg
    v R



  • Hallo,
    die in_avail()-Variante ist leider nicht portabel. Der Grund steht im Beitrag von virtuell Realisticer. Einige Implementationen liefern leider immer 0. Alternativ geht
    cin.sync();
    cin.get();

    Und jetzt kommt das Tolle: In der Regel funktioniert die sync()-Variante nicht bei Implementationen bei denen die in_avail()-Variante funktioniert und andersherum funktioniert die in_avail()-Variante genau dort nicht, wo die sync()-Variante funktioniert.



  • Dann unter Windows wohl doch lieber:

    void wait ()
    {
        FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
        ReadConsole(GetStdHandle(STD_INPUT_HANDLE),hab keine msdn lass dir hier was einfallen);
    }
    

    Ansonsten siehe Konsolen-FAQ "Automatisches Schließen verhindern"

    MfG SideWinder



  • Wie sieht's denn eigentlich mit der klassischen

    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max());
    // bzw:
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    

    Variante aus?



  • Ignoriert ignore() maximal soviele Zeichen wie da sind? Oder merkt sich der Anz-AnzDa = AnzRest und ignoriert bei der nächsten Eingabe wieder Zeichen?

    MfG SideWinder



  • SideWinder schrieb:

    Ignoriert ignore() maximal soviele Zeichen wie da sind?

    Jup. Das Problem ist nur wie das "wie da sind" implementiert wird. Einige Implementationen hören auf, sobald keine Zeichen mehr im Stream sind. Andere lesen, falls count noch nicht erreicht ist, in diesem Fall erneut von der Standardeingabe. Füllen also den Puffer neu und hören erst bei einem tatsächlichen EOF auf.



  • Hallo ihr Moderatoren!
    Was wäre denn mit der Kombination

    cin.seekg(0, ios::end); //Lesezeiger auf das Streamende setzen
    cin.get(); //...
    

    In sämtlichen Konstellationen, die ich bisher probieren konnte, hat das so funktioniert. Ist da irgendwas Gefährliches dran?



  • Könnte mir jetzt mal bitte jemand meine ernst gemeinte Frage beantworten? Würde mich nämlich wirklich interessieren...



  • Hi!

    Ich habe mal gesehen das einfach nur dies verwendet wurde und es funktioniert ebenfalls, gibt es damit irgendwie bei verschiedenen implementationen probs?:

    cin.ignore();
    

    Das wartet ja auch nur auf das Drücken der Eingabetaste.

    Code-Hacker


Anmelden zum Antworten