std::cin.ignore



  • Ich weiss, dass dieses Thema hier schonmal besprochen wurde. Und dies sehr sehr oft; aber mein anliegen ist ein wenig anders.
    Hier im forum wurde zum "offenhalten der Konsole" schon mal folgendes empfolen:
    getchar()
    getch()
    std::cin.get()
    sowie dies hier:

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

    so nun ist es ja so das cin's rdbuf wie folgt aussieht:
    basic_streambuf<charT,traits>* rdbuf() const;
    und sich basic_streambuf's in_avail wiederum wie folgt verhält

    streamsize in_avail():
    If a read position is available, returns the number of available characters in the input sequence. Otherwise, calls the protected function showmanyc() .

    und ggf siehts mit showmanyc wie folgt aus :

    Returns the number of characters available in the internal buffer, or returns -1.

    Meine Anliegen nun: in_avail kann ja afaik ggf nun auch 0 zurückgeben.
    Nun hörte ich,dass ignore() sich für 0 bei verschiedenen implementierungen auch verschieden verhalten kann.
    Um dies zum umgehen hab ich mal eine ähnliche version gesehen die ich zu dieser hier geändert habe :

    //#include<limits>
       void wait(){
           std::cin.clear();
           std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
           std::cin.get();//oder std::cin.ignore();
       }
    

    denn so wird ja die maxmimale anzahl igoriert bis zum '\n' welches ja ausgelöst wird wenn man seine Eingabe macht.

    Aber erstens weiss ich nicht ob nun nen std::cin.get(); oder std::cin.ignore();
    als letztes sinnvoller ist. Bei mir verhält es sich gleich aber ich würde gern eure Meinung hören, da ich nunja kein echter experte bin und mich mit dem Verhalten der Funktion ( ignore() ) vor allem bei verschiedenen Implementierungen (von ignore wenn in_avail() 0 liefert ) nicht auskenne bzw mir nicht sicher bin ob es denn auch wirklich anders ist.



  • push ...
    // hmm irgendjemand der mir bei dieser Sache helfen kann?



  • basic_istream<charT,traits>&
    ignore(streamsize n = 1, int_type delim = traits::eof());
    24 Effects: Behaves as an unformatted input function (as described in 27.6.1.3, paragraph 1). After constructing
    a sentry object, extracts characters and discards them. Characters are extracted until any of the following
    occurs:
    — if n != numeric_limits<streamsize>::max() (18.2.1), n characters are extracted
    — end-of-file occurs on the input sequence (in which case the function calls setstate(eofbit),
    which may throw ios_base::failure (27.4.4.3));
    — c == delim for the next available input character c (in which case c is extracted).
    25 Notes: The last condition will never occur if delim == traits::eof().
    26 Returns: *this.

    Bei Null darf also eigentlich gar nix passieren.


Anmelden zum Antworten