Wie klar stdin, bevor man neuen input?

Ich gelesen habe, etwa 5-10 verschiedene Vorschläge, wie klar stdin, aber keiner von Ihnen passt meine Bedürfnisse. Die Sache ist, dass fflush(stdin) funktionierte perfekt auf meinem Rechner, aber leider scheint es nicht überall arbeiten, also brauche ich etwas mit den gleichen Funktionen. Jeder andere Weg habe ich versucht löscht stdin, wenn es nicht leer ist, sondern die Benutzereingabe erfordert, wenn stdin IST leer, was bedeutet, es erfordert die Eingabe in einem moment, den ich nicht wollen, zu bekommen (+ verwirft er es sowieso).

Ist die Frage: Kann ich irgendwie sicherstellen, dass stdin leer IST, bevor ich eine Benutzereingabe erforderlich ist? (und wenn nicht, DANN, und nur dann ist es klar, irgendwie?)
so etwas wie:

if (stdin is NOT empty) 
    while (getchar() != '\n')
        continue;

EDIT: die Sache ist, dass ich ein load-Zeichen aus stdin eins nach dem anderen und irgendwann, ein Teil der Eingaben aus der vorherigen iteration möglicherweise oder möglicherweise nicht bekommen verworfen. so oder so, muss ich haben klar stdin bevor ich den Benutzer auffordern, für einen anderen Eingang verarbeitet werden. Löschen der Puffer selbst ist nicht so eine große Sache, das problem ist, was passiert, wenn die Eingabe leer ist, wenn das Programm auf den Punkt clearing stdin, denn in diesem moment muss das Programm eine weitere Eingabe, die gehen, um gegessen zu werden durch die clearing-Funktion. Das ist, was ich loswerden will. (wenn ich könnte fflush(stdin); ich wusste nur, dass die nächste Zeile des Programms die stdin leer, egal was, keine Frage...)

  • fflush(stdin) ist UB.
  • Es gibt keine solche Sache wie eine leere I/O-stream , es ist ein stream. Bedenken Sie: ./myprog </dev/random ; wird es jemals sehen das Ende seiner stdin-stream?
  • Programmierung unter windows, hat die Arbeit an linux...
  • Nur, welche Art von app möchten Sie dies tun? In 30 Jahren C-Programmierung habe ich nie die Notwendigkeit verspürt, und ich kenne absolut keine Programm, dies zu tun. Aber alle Neulinge wollen es. warum, OH WARUM? Was ist die anti-pattern? Was ist der XY-problem, das Sie lösen möchten?
  • Wollen Sie flush teilweise typisierte Zeilen von Eingabe (d.h. die Eingabe, für die der Anwender noch nicht eingegeben GEBEN Sie zu Begehen) als gut?
  • Die apt-get Programm tut dies absichtlich. Siehe Verhindern, dass sudo, apt-get, etc. schlucken eingefügt input auf STDIN

InformationsquelleAutor Tom | 2016-04-19
Schreibe einen Kommentar