Les Allergies
Alimentaires
Posez votre question Signaler

EOF comment ca marche exactement???

marc - Dernière réponse le 24 juin 2002 à 09:31
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 ???
Lire la suite 

EOF comment ca marche exactement »

17 réponses
Réponse
+1
moins plus
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....
Ajouter un commentaire
Réponse
+0
moins plus
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?
.  .
\_/
marc - 21 juin 2002 à 16:19
en fait ce que je veux savoir c'est comment arreter le programme (sur quelle(s) touche(s) il faut appuyer ?).
Ajouter un commentaire
Réponse
+0
moins plus
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.
marc - 21 juin 2002 à 16:51
elle marche pas ta combinaison en fait elle permet d'afficher un caractere special
Ajouter un commentaire
Réponse
+0
moins plus
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 .
teebo- 21 juin 2002 à 16:48
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
Marden- 21 juin 2002 à 17:41
Das ist nicht möglich !
Quelle valeur aurait ce caractère ? C'est la routine de lecture qui retourne, par convention, cette valeur. Le langage C n'est pas censé savoir comment est implanté physiquement le fichier, c'est le problème de l'OS et des interfaces.
teebo- 21 juin 2002 à 17:45
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
Ajouter un commentaire
Réponse
+0
moins plus
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 .
Marden- 21 juin 2002 à 22:06
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).
Marden- 21 juin 2002 à 17:47
La fin de l'entrée clavier est ctrl+D (et non ctrl+Z) !
Pour faire le test, exécute ton programme avec un fichier "text.dat" rempli manuellement en redirigeant l'entrée par "< text.dat";
Tu pourras aussi comparer le résultat avec celui de la commande "wc -c" .

Si mes souvenirs sont bons ...
marc - 22 juin 2002 à 16:13
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Marden- 23 juin 2002 à 22:28
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.
Ajouter un commentaire
Ce document intitulé « EOF comment ca marche exactement??? » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?