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
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
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
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....
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....
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
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?
. .
\_/
. .
\_/
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
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.
#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 .
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
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
"Pour qu'il y ait moins de mecontents il faut
toujours taper sur les memes"Prof. Shadoko
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
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.
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
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
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
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 .
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
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
"Pour qu'il y ait moins de mecontents il faut
toujours taper sur les memes"Prof. Shadoko
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
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 .
Elle est definie ds stdio.h
le pb est qu'il n'y a pas de caractere qui corresponde a cette valeur ascii .
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
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).
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
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
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 ...
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
>
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
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
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
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
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.
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.