EOF comment ca marche exactement???

Fermé
marc - 20 juin 2002 à 22:28
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 - 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 ???

6 réponses

jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
24 juin 2002 à 09:31
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....
1
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
20 juin 2002 à 23:24
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?
.  .
\_/
0
en fait ce que je veux savoir c'est comment arreter le programme (sur quelle(s) touche(s) il faut appuyer ?).
0
Marden Messages postés 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006 210
21 juin 2002 à 00:08
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.
0
elle marche pas ta combinaison en fait elle permet d'afficher un caractere special
0
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 .
0
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
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
0
Marden Messages postés 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006 210 > teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011
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.
0
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793 > Marden Messages postés 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006
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
0

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 .
0
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
21 juin 2002 à 17:47
Il te faut fixer une valeur de EOF en ASCII je pense, mais bon mes cours de C commencent a dater dans ma petite tete...

"Pour qu'il y ait moins de mecontents il faut 
toujours taper sur les memes"
Prof. Shadoko
0
marc > teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011
21 juin 2002 à 18:29
la valeur ascii de EOF est -1.
Elle est definie ds stdio.h
le pb est qu'il n'y a pas de caractere qui corresponde a cette valeur ascii .
0
Marden Messages postés 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006 210 > marc
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).
0
Marden Messages postés 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006 210
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 ...
0
marc > Marden Messages postés 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006
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
0
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
0
Marden Messages postés 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006 210
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.
0