EOF comment ca marche exactement???
marc
-
jisisv Messages postés 3645 Date d'inscription Statut Modérateur Dernière intervention -
jisisv Messages postés 3645 Date d'inscription Statut Modérateur Dernière intervention -
je debute en C et premier probleme
j'ai du mal a saisir le fonctionnement de EOF avec la fonction getchar .voici le programme (exemple repris ds un bouquin) a partir duquel j'ai teste la fonction GETCHAR avec EOF mais le resultat n'est pas celui attendu :
#include<stdio.h>
main()
{
int c;
c=getchar();
while (c != EOF) {
putchar (c);
c=getchar();
}
}
Normalement ce programme s'arrete lorsque EOF est affectée a la variable c.Je ne sais pas comment se passe cette affectation (quelle est la manip pour arreter le programme ???
j'ai du mal a saisir le fonctionnement de EOF avec la fonction getchar .voici le programme (exemple repris ds un bouquin) a partir duquel j'ai teste la fonction GETCHAR avec EOF mais le resultat n'est pas celui attendu :
#include<stdio.h>
main()
{
int c;
c=getchar();
while (c != EOF) {
putchar (c);
c=getchar();
}
}
Normalement ce programme s'arrete lorsque EOF est affectée a la variable c.Je ne sais pas comment se passe cette affectation (quelle est la manip pour arreter le programme ???
6 réponses
Si tu n'effectues pas de redirection d'entrée, c'est don cl'entrée clavier qui est utilisée.
Sous DOS et Win$ c'est Crl-Z (F6 fonctionne auss)
sous Unix Ctrl-D clôt l'enreée standard.
Johan Daine
Gates gave us the windows.
Linux gave us the whole house....
Sous DOS et Win$ c'est Crl-Z (F6 fonctionne auss)
sous Unix Ctrl-D clôt l'enreée standard.
Johan Daine
Gates gave us the windows.
Linux gave us the whole house....
Le EOF est une fonction qui regarde si le caractere a depasse la fin du fichier, autant que je me souvienne du C ca devrait marcher ton code, il reagit comment puisque tu dis qu'il ne fait pas ce que tu attends?
. .
\_/
. .
\_/
EOF est une valeur définie dans stdio.h :
#define EOF -1
qui est la valeur retournée par la fonction getchar() en fin de l'entrée stdin, qui est le terminal par défaut.
La fin de fichier doit être provoquée par <ctrl>D si l'entrée standard est effectivement le clavier.
En fait, la valeur EOF écrite dans le code est remplacée par la valeur -1 après traitement par le pré-processeur (il y a une option (?) du compilateur qui permet de conserver le fichier intermédiaire pour voir le résultat après substitutions).
De même, la fonction getchar est définie dans stdio.h comme étant :
#define getchar() getc(stdin)
et remplacée par le pré-processeur.
#define EOF -1
qui est la valeur retournée par la fonction getchar() en fin de l'entrée stdin, qui est le terminal par défaut.
La fin de fichier doit être provoquée par <ctrl>D si l'entrée standard est effectivement le clavier.
En fait, la valeur EOF écrite dans le code est remplacée par la valeur -1 après traitement par le pré-processeur (il y a une option (?) du compilateur qui permet de conserver le fichier intermédiaire pour voir le résultat après substitutions).
De même, la fonction getchar est définie dans stdio.h comme étant :
#define getchar() getc(stdin)
et remplacée par le pré-processeur.
Ds mon prog la boucle s'arrete losque C est egal a EOF (c'est a dire -1.)
EOF est donc une constante .
A cette constante est affectée la valeur -1 .
cela voudrait donc dire que losque je tape la combi ctrl+D la valeur -1 est entrée .
EOF est donc une constante .
A cette constante est affectée la valeur -1 .
cela voudrait donc dire que losque je tape la combi ctrl+D la valeur -1 est entrée .
Non en fait, EOF ca veut dire End Of File,et c'est la fin du fichier, , en fait il faut imaginer qu'a la fin de ton fichier texte tu ais un caracter invisible qui s'appelle EOF, tu ne le "rentres" pas, et donc ca te lis tout jusqu'a la fin du fichier...
"Pour qu'il y ait moins de mecontents il faut
toujours taper sur les memes"Prof. Shadoko
"Pour qu'il y ait moins de mecontents il faut
toujours taper sur les memes"Prof. Shadoko
Merde encore un germanophone ,-)))
Bon en fait, je m'essayai a la vulgarisation en disant ca se passe comme si...
Bon j'ai peut etre rate mon coup mais marc qui cherche desesperement a provoquer un EOF au clavier, je voulais essayer de lui montrer autre chose...
"Pour qu'il y ait moins de mecontents il faut
toujours taper sur les memes"Prof. Shadoko
Bon en fait, je m'essayai a la vulgarisation en disant ca se passe comme si...
Bon j'ai peut etre rate mon coup mais marc qui cherche desesperement a provoquer un EOF au clavier, je voulais essayer de lui montrer autre chose...
"Pour qu'il y ait moins de mecontents il faut
toujours taper sur les memes"Prof. Shadoko
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
voici un prog tiré du bouquin "le langage c norme ansi" de kernighan et ritchie
#include<stdio.h>
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc );
}
Ce prog devrait compter le nombre de caractere saisi jusqu'a ce que la fonction getchar soit affectée de EOF .
Le probleme est que lorsque je lance ce prog sous windows (fenetre msdos) il ne me renvoie pas la valeur de la variable NC .
En fait lorsque je sasi 1 caractere ou une chaine de caracteres et que j'appuye sur entrée la boucle ne s'arrete pas .et donc NC continue a etre incrementé .J'ai essayé la combi ctrl+Z mais cette combi arrete non seulement la boucle mais aussi le reste du prog .
#include<stdio.h>
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc );
}
Ce prog devrait compter le nombre de caractere saisi jusqu'a ce que la fonction getchar soit affectée de EOF .
Le probleme est que lorsque je lance ce prog sous windows (fenetre msdos) il ne me renvoie pas la valeur de la variable NC .
En fait lorsque je sasi 1 caractere ou une chaine de caracteres et que j'appuye sur entrée la boucle ne s'arrete pas .et donc NC continue a etre incrementé .J'ai essayé la combi ctrl+Z mais cette combi arrete non seulement la boucle mais aussi le reste du prog .
Il ne s'agit pas d'une valeur ascii, mais simplement d'une valeur symbolique, qui est remplacée par la valeur -1 (relire plus haut).
C'est comme si tu effectuais le test de la variable "c" (qui n'est pas un caractère, puisque déclarée "int", dans laquelle le système charge la valeur ascii du caractère lu) avec la valeur -1 (à laquelle justement, ne correspond aucun caractère, ce qui permet de lui attribuer un sens particulier : il n'y a plus rien à lire).
C'est comme si tu effectuais le test de la variable "c" (qui n'est pas un caractère, puisque déclarée "int", dans laquelle le système charge la valeur ascii du caractère lu) avec la valeur -1 (à laquelle justement, ne correspond aucun caractère, ce qui permet de lui attribuer un sens particulier : il n'y a plus rien à lire).
avant tout je voudrais remercié tout le monde pour l'aide apportée .
j'ai enfin compris et voici ma conclusion :
Je travaille sous le dos de windows et non sous linux .
pour que la fonction getchar recoive le signal(ici la valeur -1) il existe une combinaison de touche .Sous linux(et tout les autres unix-like) cette combi est crtl+D mais sous le DOS de bill c'est bien ctrl+Z .voila c'etait si simple mais j'ai quand meme installé LINUX sur mon pc et lancer le prog sous l'emulateur de terminal.ET oui je débute aussi sous linux ...Et encore merci
j'ai enfin compris et voici ma conclusion :
Je travaille sous le dos de windows et non sous linux .
pour que la fonction getchar recoive le signal(ici la valeur -1) il existe une combinaison de touche .Sous linux(et tout les autres unix-like) cette combi est crtl+D mais sous le DOS de bill c'est bien ctrl+Z .voila c'etait si simple mais j'ai quand meme installé LINUX sur mon pc et lancer le prog sous l'emulateur de terminal.ET oui je débute aussi sous linux ...Et encore merci
salut,
j ai lu toute cette discussion avec interet, mais je me pose la question, une fois arrivé a la fin: A quoi ca sert de faire un test sur le caractere EOF quand on fait le getchar sur la console?
Parce que apparement, le seul probleme vient de la!
Chmanu
j ai lu toute cette discussion avec interet, mais je me pose la question, une fois arrivé a la fin: A quoi ca sert de faire un test sur le caractere EOF quand on fait le getchar sur la console?
Parce que apparement, le seul probleme vient de la!
Chmanu
Il ne faut toujours pas parler de caractère EOF.
L'entrée au clavier permet de tester son programme sans passer par un fichier. L'exemple est plutôt un exercice tiré d'un ouvrage, permettant d'apprendre à programmer une sortie propre de l'appli, avec ou sans fichier, et ce, sans avoir à changer le code.
L'entrée au clavier permet de tester son programme sans passer par un fichier. L'exemple est plutôt un exercice tiré d'un ouvrage, permettant d'apprendre à programmer une sortie propre de l'appli, avec ou sans fichier, et ce, sans avoir à changer le code.