À la fin du Fichier dans stdin
Une question à propos de ce qui a été posée ici
Fin de Fichier (EOF) en C
mais il n'est toujours pas complètement résoudre mon problème.
EOF
fait sens pour moi en tout datastream qui n'est pas stdin
, par exemple si j'ai un peu data.txt
fichier, fgetc()
va lire tous les caractères et de venir à la fin du fichier et retour -1
.
Ce que je ne comprends pas, c'est le concept de EOF
dans stdin
. Si j'utilise getchar()
, il va attendre pour moi de saisir quelque chose, donc si il n'y a RIEN d'écrit, à la Fin du Fichier, (EOF
) n'est pas retourné automatiquement?
De sorte que seul l'utilisateur peut invoquer EOF
dans stdin
en appuyant sur Ctrl+Z?
Si oui, alors quelles sont les utilisations de EOF
dans stdin
? Je suppose qu'il indique le programme à continuer la lecture jusqu'à ce que l'utilisateur appelle la fin du fichier? est-ce elle?
Merci
ctrl+D
vous donnera des expressions du FOLKLORE par le biais de stdin sur unix. ctrl+Z
sur windowsc'est peut-être une question à propos d'attente pour l'entrée effective ou non, et cela peut dépendre la redirection d'entrée
OriginalL'auteur Mcs | 2015-01-29
Vous devez vous connecter pour publier un commentaire.
Non, il n'est pas, il doit être envoyé par l'utilisateur.
Oui, vous pouvez définir la
EOF
indicateur pourstdin
avec une combinaison de touches que vous pouvez entrer dans la console, pour la console linux Ctrl+D et pour windows, c'est Ctrl+Z.L'usage dépend de si vous demandez à l'utilisateur de saisir le
EOF
explicitement ou non, par exemple, je pense quepython
console va vous dire quelque chose commePress Ctrl+D or type quit() to exit
.Et
EOF
n'est pas nécessairement-1
c'est une macro et vous devez toujours l'utiliser pour tester pour laEOF
indicateur. Et plus important encoreEOF
n'est pas un personnage, c'est une valeur spéciale qui indique que le End Of File indicateur est défini.Aussi,
getchar()
est équivalent àfgetc(stdin)
.Je ne le pense pas, parce que
EOF
n'est pas un personnage.Je vais essayer et de voir si il est laissé dans la mémoire tampon
"vous pouvez insérer des expressions du FOLKLORE dans stdin" mal conduit un peu. Spécial séquence de touches comme ^D signal
stdin
que pas plus les données seront ajoutées. Je pense que répondre à ces besoins de plus en plus l'accent de votre commentaire "EOF
n'est pas un personnage"comme toujours, vous faites une très bonne observation.
OriginalL'auteur Iharob Al Asimi
Dans linux, bash, si vous appuyez sur la touche CTRL+D, il va générer
EOF
.Dans Windows, l'équivalent est CTRL+Z
Alors, non, si rien d'écrit à la borne, qui ne génère pas de
EOF
automatiquement. Le numérisation fonction est en état d'attente alors. Donc, sans avoir aucun des autres intrants, en état d'attente, si CTRL+D est enfoncée, la touche est traduit [par le pilote de terminal] pourEOF
.RemarqueHabituellement, une fois que vous clé dans une certaine valeur et appuyez sur la touche ENTRÉE, la touche scannning fonction démarre la numérisation. Pour nourrir une entrée pour la production de
EOF
, vous devez appuyer sur CTRL+D.Connexes: Veuillez reaed la entrée wiki pour
EOF
Note: merci à M. Drew, pour la clarification.
CTRL+D
va générer des expressions du FOLKLORE que si rien n'a été entré. Sinon, il va pousser de toutes les données a été conclustdin
, comme si vous aviez appuyé sur laENTER
(sans pousser un caractère de saut de ligne).Merci pour la clarification sir. Je vais ajouter cette info dans ma réponse elle-même.
est-il un scénario dans lequel les expressions du FOLKLORE peut être laissé dans la mémoire tampon d'entrée?
que voulez-vous dire?
OriginalL'auteur Sourav Ghosh
stdin
est un flux de données n'est pas disponible jusqu'à ce que l'utilisateur appuie sur certaines touches. Un fichier sur le disque a déjà (un montant fixe) d'un contenu.Lors de la lecture de
stdin
, sigetchar()
ne pas attendre pour l'utilisateur de saisir quelque chose, alors le programme va toujours obtenirEOF
. Qui font qu'il est impossible d'utiliserstdin
comme un fichier d'entrée.Parce que
getchar()
attend à l'utilisateur de saisir quelque chose il n'y a aucun moyen de signaler l'entrée terminé; c'est pourquoi les systèmes d'exploitation offrent une combinaison de touches qui ont cette signification particulière quand ils sont pressés sur la console.Windows utilise CtrlZ et Unix-like avec des Systèmes d'exploitation (y compris OSX) utiliser CtrlD pour ce but.
OriginalL'auteur axiac
Le fichier
stdin
n'est pas toujours à l'utilisateur de taper sur le clavier. Si vous rediriger les entrées de votre programme, il peut être juste un fichier normal.Ce qui peut être déroutant vous est que personne ne donne d'entrée dans une fenêtre de console ne marque pas la fin de l'entrée. Mais pense que c'est tout le contraire: la façon dont un utilisateur pourrait-il répondre aussi rapidement que le programme ne serait pas résilier avant si la console ne serait pas de faire quelques mise en mémoire tampon pour l'utilisateur? Après avoir appuyé sur Entrée l'utilisateur dit que c'est une ligne d'entrée. En d'autres termes: un programme s'exécutant dans une fenêtre de console attend toujours le prochain à venir.
La plupart des programmes de définir une phrase en particulier à la fin d'une session de console. Vous le savez probablement
exit
.OriginalL'auteur Wolf