Wie kann ich für eine C++ - Anwendung ein Ende der Datei (EOF) programmgesteuert auf Stdin erzwingen?Wie zwinge ich eof auf stdin?
Antwort
Eigentlich können Sie nicht. Solange Sie Daten von stdin lesen können, wurde EOF nicht erreicht, und tatsächlich können Sie es nie erreichen. Sie können die stdin
jedoch selbst schließen. Um es zu schließen, dies tun:
fclose(stdin);
Danach können Sie keine Daten von stdin
lesen.
Wenn Sie an einem Terminal in einem Unix-ähnlichen System arbeiten, wählen Sie Ctrl-D
. In Windows Ctrl-Z
.
Edit: Nachdem ich den Wunsch, dies "programmgesteuert" zu tun, habe ich vorgeschlagen, versuchen fclose(stdin)
. Wenn das irgendwie nicht gut genug ist, könnte es eine verrücktere Idee sein, std::cin.rdbuf()
zu verwenden, um den Stream so einzustellen, dass er sich auf etwas anderes als die echte Standardeingabe bezieht, und dann den gewünschten Stream zu machen. Aber das fängt an schlecht zu riechen, als würdest du gegen den Computer kämpfen, also würde ich gerne mehr darüber wissen, was das eigentliche Ziel ist.
Es gibt eine nette kleine Funktion für jeden Stream, der speziell dafür erstellt wurde.
Es ist Syntax ist so etwas wie:
stream.setstate(stream.flags)
So in Ihrem Code können Sie eine einfache Bedingung, die wie etwas auslöst:
std::cin.setstate(std::cin.eofbit);
Die Dokumentation für diese ziemlich spärlich, aber es gibt einige auf cppreference.com und cplusplus.com.
- 1. Ctrl Signale füllt Stdin mit EOF?
- 2. Wie signalisieren Sie EOF zu node.js stdin von der Konsole?
- 3. Wie zwinge ich mein Fenster zur Größenanpassung?
- 4. Programm stoppt nicht auf EOF
- 5. Senden von EOF zu stdin in Clion IDE
- 6. Detecting EOF in C++ aus einer Datei zu STDIN umgeleitet
- 7. Wie kann ich den Inhalt von stdin (bis EOF) in eine Zeichenfolge in PHP einlesen?
- 8. Wie zwinge ich den C++ - Indexer von Eclipse?
- 9. Wie reproduziere ich `stdin = sys.stdin` mit` stdin = PIPE`?
- 10. ksh: wie stdin zu testen?
- 11. Wie man mit `read_line()` nach EOF sucht?
- 12. Wie kann ich STDIN testen, ohne in Perl zu blockieren?
- 13. C# Textdatei - wie schreibe ich EOF Zeichen
- 14. Wie ändere ich die Stdin-Codierung auf Python
- 15. git: leere Zeile auf EOF
- 16. Eingeben eines Eingabestroms mit EOF
- 17. Anwendung beenden, während stdin blockiert auf Windows
- 18. Wie vergleicht man eine Zeichenkette mit EOF?
- 19. Wie lese ich Konsoleneingabe/-Stdin in Dart?
- 20. Wie kompiliere ich Code von stdin?
- 21. Wie kann ich Stdin und Stdout testen?
- 22. Ruby scan/bekommt bis EOF
- 23. PHP Echos readline auf stdin
- 24. getchar() = EOF
- 25. fgetc, EOF
- 26. Go - schreiben auf stdin auf externen Befehl
- 27. Wie erkennt man EOF auf der Konsole in C#? Was gibt Console.ReadLine() bei EOF zurück?
- 28. Wie sende ich EOF von der Kommandozeile zu Python sys.stdin? CTRL-D funktioniert nicht
- 29. Prüfung auf eof in string :: getline
- 30. Python 3: Wie stdin codieren
Wie meinst du 'zwingen EOF auf stdin'? Sie könnten Stdin (oder Cin) schließen. Sie könnten Ihre Schleife einseitig beenden lassen. Sie könnten bis zum Ende der Datei suchen (aber das hilft nicht mit einem Terminal oder einer Pipe als Eingabe). Sie könnten das Problem mit 'freopen()' erzwingen; Standardeingabe neu zuweisen, um von/dev/null oder NUL: zu lesen. –