Da entdeckte ich fflush(stdin)
kein tragbarer Weg ist mit dem bekannten Problem der „Newline lauern im Eingangspuffer“ zu behandeln, ich habe folgende benutze, wenn ich zu Verwendung haben scanf
:Kann fseek (stdin, 1, SEEK_SET) oder rewind (stdin) verwendet werden, um den Eingabepuffer anstelle von nicht-portablem fflush (stdin) zu löschen?
while((c = getchar()) != '\n' && c != EOF);
Aber heute habe ich über diese Linie gestolpert, die ich bemerkt hatte, aus cplusplus.com on fflush: der Strom
fflush() ... in Dateien geöffnet für update (sowohl für das heißt offene Lese und Schriftfelter) wird nac gespült werden r eine Ausgabeoperation, bevor eine Eingabeoperation ausgeführt wird. Dies kann entweder dadurch erfolgen, dass Neupositionierung (fseek, fsetpos, Zurückspulen) oder durch den Aufruf explizit fflush
In der Tat habe ich gelesen, dass vor vielen times.So ich bestätigen will, wenn ich einfach jemanden der folgenden verwenden kann vor den scanf()
den gleichen Zweck zu dienen, dass fflush(stdin)
dient, wenn es unterstützt wird:
fseek(stdin,1,SEEK_SET);
rewind(stdin);
PSrewind(stdin)
scheint ziemlich sicher und praktikabel die Puffer, bin ich falsch zu spülen?
Fehler Ich hätte fseek(stdin,0,SEEK_SET)
erwähnt, wenn wir stdin
reden als wir von ftell()
zurück jeden Offset ungleich 0 oder einem in diesem Fall nicht verwendet werden können.
Von Ihrem Zitat:“... * der Strom wird * nach einer Ausgabeoperation gespült werden .. . " Erwarten Sie, dass Sie Ausgabeoperationen auf 'stdin' ausführen, um' fflush (stdin) 'zu benötigen? Das scheint albern! Sie möchten * in einen * schreibgeschützten * Stream schreiben ?! Warum beschreibst du nicht, was du meinst, indem du * den Puffer spülst, oder was du mit 'fflush (stdin)' machen willst? Sie können auch darüber nachdenken, was 'fflush' tatsächlich gemäß [einem Nicht-C++ Handbuch] (http://pubs.opengroup.org/onlinepubs/009695399/functions/fflush.html) tut. Schließlich ist das C, nicht C++ ... – Sebivor
@undefinedbehaviour Das ist nicht mein Zitat. Das ist von http://www.cplusplus.com/reference/cstdio/fflush/ genommen und das spricht über beide I/O-Streams, nicht "stdin" im Besonderen. Was ich meinte, ist, wenn wir von 'stdin' lesen, gemäß diesem Absatz, wären wir in der Lage, es zu spülen, indem wir' rewind() 'oder' fseek() 'darauf verwenden. – Jugni
'stdin' ist nur zum Lesen geöffnet, nicht zum Aktualisieren (Lesen und Schreiben). Verwechsle diese beiden Modi nicht. Es ist nicht ungewöhnlich, dass diese Website grob ungenau ist. Suchen Sie eine andere manuelle Website. Ich empfehle opengroup. – Sebivor