Ich habe ungefähr 5-10 verschiedene Ratschläge gelesen, wie man Stdin löscht, aber keiner von ihnen passt zu meinen Bedürfnissen. Die Sache ist, dass fflush(stdin)
perfekt an meinem Computer funktioniert, aber leider scheint es nicht überall zu funktionieren, also brauche ich etwas mit der gleichen Funktionalität. Jede andere Art, die ich versuchte, löscht Stdin, wenn es nicht leer ist, aber erfordert Benutzereingaben, wenn stdin leer ist, was bedeutet, dass es Eingaben in einem Moment benötigt, den ich nicht bekommen möchte (+ es wirft es trotzdem ab).Wie lösche ich die Standardeingabe, bevor ich eine neue Eingabe erhalte?
Die Frage ist: Kann ich irgendwie sicherstellen, dass stdin
IS leer ist, bevor ich Benutzereingaben benötige? (Und wenn nicht, dann und nur dann klar, dass es irgendwie?) so etwas wie:
if (stdin is NOT empty)
while (getchar() != '\n')
continue;
EDIT: die Sache ist, dass ich Zeichen laden von stdin
eins nach dem anderen und irgendwann, einen Teil der Eingabe von vorherige Iteration könnte oder wird nicht verworfen. So oder so, ich brauche clear stdin
, bevor ich den Benutzer für eine andere Eingabe, die verarbeitet werden soll. Das Löschen des Puffers selbst ist keine so große Sache, das Problem ist, was passiert, wenn die Eingabe leer ist, wenn das Programm zum Löschen stdin
kommt, weil das Programm in diesem Moment eine andere Eingabe benötigt, die von der Reinigung aufgefressen wird Funktion. Das will ich loswerden. (Wenn ich fflush(stdin);
verwenden kann ich wusste nur, dass für die nächste Zeile meines Programms der stdin
leer sein wird, egal was, keine Fragen gestellt ...)
'fflush (stdin)' ist UB. –
Es gibt keinen * leeren I/O-Stream *, es ist ein ** Stream **. Betrachte: './myprog dev/random'; Wird es jemals das Ende seines Standardstroms sehen? – joop
Programmierung auf Windows, muss bei Linux arbeiten ... – Tom