Per un'applicazione C++, come posso forzare a livello di codice una fine del file (EOF) su stdin?Come faccio a forzare eof su stdin?
risposta
In realtà, non è possibile. Finché puoi leggere i dati da stdin, EOF non è stato raggiunto, e in effetti non puoi mai raggiungerlo. È possibile chiudere lo stesso stdin
, tuttavia. Per chiuderlo, fare questo:
fclose(stdin);
Dopo questo, non è possibile leggere i dati dal stdin
.
Se sei a un terminale in un sistema simile a Unix, premi Ctrl-D
. In Windows, Ctrl-Z
.
Modifica: Avendo visto il desiderio di eseguire questa operazione "programmaticamente", suggerisco di provare fclose(stdin)
. Se in qualche modo questo non è abbastanza buono, un'idea più pazza potrebbe essere quella di usare std::cin.rdbuf()
per impostare lo streaming in modo che si riferisca a qualcosa di diverso dal vero stdin, e poi fare ciò che si vuole per quel flusso. Ma questo comincia ad avere un cattivo odore, come se stessi combattendo contro il computer, quindi mi piacerebbe sapere di più su quale sia il vero obiettivo.
C'è una bella piccola funzione disponibile per ogni flusso creato appositamente per questo.
E 'la sintassi è qualcosa di simile:
stream.setstate(stream.flags)
Quindi nel tuo codice è possibile avere un semplice condizione che fa scattare qualcosa come:
std::cin.setstate(std::cin.eofbit);
La documentazione di questo è piuttosto scarsa, ma c'è un po' su cppreference.com e cplusplus.com.
- 1. Come segnalare EOF a node.js stdin dalla console?
- 2. Come scrivere EOF a STDIN popen in python
- 3. invio EOF allo stdin in Clion IDE
- 4. STDIN e PowerShell - Come faccio a far coincidere la codifica?
- 5. Come faccio a forzare git NOT a richiedere le credenziali
- 6. Come verificare EOF con `read_line()`?
- 7. Come faccio a forzare JScrollPane a scorrere solo in verticale?
- 8. Come posso leggere il contenuto di stdin (fino a EOF) in una stringa in PHP?
- 9. Come faccio a forzare ScriptManager a offrire script CDN su SSL
- 10. copy_n o fino a eof?
- 11. Test di connettività IPhone: come faccio a forzare la connessione?
- 12. Come inviare EOF a Python sys.stdin dalla riga di comando? CTRL-D non funziona
- 13. Come faccio a uscire da un loop in Haskell?
- 14. Come faccio a distinguere tra un carattere EOF e la fine effettiva del file?
- 15. Come faccio a impostareQueryTimeout su SimpleJdbcTemplate?
- 16. Come faccio a forzare i telefoni a riconoscere i numeri internazionali sul mio sito web?
- 17. Scrivere su stdin da PHP?
- 18. Come faccio a forzare le note a fondo pagina quando la pagina non è piena?
- 19. Windows equivalente a "/ dev/stdin"?
- 20. Rappresenta la funzione EOF -> False, A -> A ∀ A ≠ EOF in Racket tipizzato?
- 21. Come posso resettare lo stdin in Haskell?
- 22. Come faccio a forzare il compilatore C# a generare un'eccezione quando qualsiasi operazione matematica produce "NaN"?
- 23. Come faccio a forzare jQuery append a NON chiudere automaticamente un tag?
- 24. Come faccio a forzare Chrome Postman a restituire application/xml invece di application/octect-stream
- 25. Leggere STDIN (SYSIN) in COBOL
- 26. git: nuova riga vuota a EOF
- 27. Come faccio a collegare static v su windows usando msys?
- 28. Come faccio a collegarmi in profondità a Netflix su tvOS?
- 29. Android: come forzare onStartCommand() a essere chiamato prima su onBind()?
- 30. wget o curl da stdin
Come intendete 'forza EOF su stdin'? Potresti chiudere stdin (o cin). Potresti far terminare unilateralmente il tuo ciclo. Si potrebbe cercare fino alla fine del file (ma ciò non aiuterà con un terminale o pipe come input). Potresti essere in grado di forzare il problema con 'freopen()'; riassegna lo standard input per leggere da/dev/null o NUL :. –