Fin de fichier (EOF) du flux d'entrée standard (stdin)
Ne stdin a des expressions du FOLKLORE? Pour l'e.g - Si je commence la lecture à partir de stdin à l'aide de fread/lire ensuite lors de la boucle suivante sera la fin?
while ((c = read(0, buffer, BUFSIZ)) > 0) {
.
.
.
}
Si la solution ci-dessus est non, alors est-il possible d'ajouter des expressions du FOLKLORE dans le stdin?
source d'informationauteur Ravi Gupta
Vous devez vous connecter pour publier un commentaire.
Parler de
EOF
dans stdin: lorsque vous rediriger les entrées à partir d'un fichier, par exemple:le fichier a déjà un
EOF
donc ce n'est pas un problème. Dans la console, vous pouvez simulerEOF
drapeau. Dans les systèmes UNIX, c'est Ctrl+DWindows Ctrl+Z. Lorsque vous tapez ceci dans la console, le programme va se comporter comme il l'a juste atteint la fin du fichier d'entrée.Modifier
Conformément à une question posée par l'OP:
En fait, oui. On peut envisager le stdin (pas redirigé, mais prises à partir de la console) infini fichier -- personne ne peut dire où il se termine. La fin de fichier d'entrée, où l'entrée de l'ist stdin, doit être dit littéralement par Ctrl+D ou Ctrl+Z.
Je n'ai jamais programmé en C sous windows donc je ne peux pas vous dire, mais en bash, le programme sera un EOF lorsque vous tapez fin des données (Ctrl+D)
Vous ne dites pas le type de
c
mais l'utilisation de ce nom implique que c'est unchar
. Notez que les expressions du FOLKLORE de la valeur pour iosteams est un(int) -1
. Stocker dans un unsigned char, vous obtenez une valeur de 255, qui ne correspondra pas à des expressions du FOLKLORE.Le moyen de tester la EOF est de vérifier la valeur de retour de fread, puis utiliser la fonction feof:
Votre solution est marqué, C++, voici donc du C++.
Première getchar() est vraiment getc(stdin) donc getc(FILE), vous pouvez en lire plus à partir de cela. getchar() est la dernière non transformés caractère de flux d'entrée ou stdin en appuyant sur entrée est '\n'. si le stdin est vide getchar forces d'une pause pour obtenir l'entrée.
Dire dans un programme que j'appel getchar() à la première stdin est vide, donc il s'arrête pour l'entrée. Si j'entre ab'\n' de la première getchar() 97 ascii de 'a'. la prochaine fois que j'appelle getchar() je vais obtenir b , puis de nouveau getchar() aura des '\n'.
Pour le prouver écrire ce code.
Je ne crois stdin est un global, jusqu'à ce que getchar() ou une fonction similaire est appelé à effacer le flux des caractères restent là-bas qui peut causer des bugs plus tard si vous utilisez getchar() ailleurs. Comme les gens ont mentionné que vous pouvez utiliser gets(char[]) qui met tous les caractères jusqu'à ce que le saut de ligne dans le tableau de caractères. Le problème avec ceci est que vous avez besoin d'un char[] plus grande que l'entrée ou vous obtiendrez des erreurs. La bonne chose est gets(char[]) est clair stdin vous pouvez faire un dumby tampon pour effacer l'entrée standard stdin ou d'un processus.
J'espère que c'est instructif.