Was passiert sein muss ist, dass Ihr putback
im streambuf
get Bereich, der std::cin
zugeordnet ist, keinen Platz gefunden hat (sonst wäre eine Leseposition verfügbar gewesen und egptr() - gptr()
wäre nicht Null gewesen) ) und muss dank pbackfail
zu einer darunterliegenden Ebene gegangen sein.
in_avail()
ruft showmanyc()
auf und Null (was die Standardimplementierung dieser virtuellen Funktion ist) ist eine sichere Sache, da es bedeutet, dass ein Lesevorgang möglicherweise blockiert und möglicherweise fehlschlägt, aber auch nicht garantiert wird . Natürlich ist es möglich, dass eine Implementierung in diesem Fall eine hilfreichere Implementierung für showmanyc()
bietet, aber die einfache Implementierung ist billig und konform.
Offenbar ist es ein Bug / Feature einiger Compilerimplementierungen Fügen Sie die Zeile
ein %Vor%irgendwo am Anfang des Codes, und das sollte es beheben
BEARBEITEN: Denken Sie auch daran, dass in_avail immer 1 mehr als die Anzahl der Zeichen in der Eingabe zurückgibt, weil es das Ende des Eingabezeichens zählt.
EDIT2: Wie ich gerade überprüft habe, funktioniert Putback nicht, es sei denn, Sie haben versucht, zuerst etwas aus dem Stream zu lesen, daher das "Zurück" in "Putback". Wenn Sie Zeichen in das CIN einfügen möchten, wird dieser Thread die Antwort liefern: Injection string to 'cin'
Tags und Links c++