Je me suis très récemment mis sur le cours en C, et la j'en suis sur le chapitre parlant de l'échange entre fichier, avec notament "fgetc".
Dans le cour on nous apprend donc a lire les caractères contenus dans un fichier grâce à la fonction fgetc.
Avant que le cours nous donne l'exemple de comment passer en revu tout le contenu du fichier, j'ai essayé de réaliser moi meme le code, en utilisant un while... Et ça ne marche pas. Dans le cours un do while est utilisé et ça marche.
Ma question est donc, pourquoi le while ne fonctionne pas ?
Le code (avec ma version qui ne fonctionne pas en remarque ( /*...*/ ):
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
FILE* fichier = NULL ;
int caracterelu =0;
fichier = fopen("test.txt", "r");
if (fichier == NULL)
{
printf("On a un souci a l'ouverture du fichier, je stop le programme");
}
else
{
/* Ma version qui ne fonctionne pas :
while (caracterelu != EOF );
{
caracterelu = fgetc(fichier);
printf("%c", caracterelu);
}
*/
do
{
caracterelu = fgetc(fichier);
printf("%c", caracterelu);
}
while (caracterelu != EOF);
fclose(fichier);
}
return 0;
}
Merci
Edit : J'ai oublié de préciser que par "ça ne marche pas" j'entends que je n'ai ni erreur ni meme de warning dans le log, mais juste rien ne s'affiche dans la console.
Si jamais la valeur de EOF est 0, alors il n'ira jamais dans la boucle puisque la condition ne serait pas vraie d'entrée.
À ton avis, quelle est valeur de EOF ? Ce ne serait pas 0 ?
Attention, je ne dis pas que c'est 0 (*), mais qu'il faut faire attention à ne pas initialiser sans savoir pourquoi. J'ai peur que Quicky ait initialisé à 0 juste parce qu'on initialise toujours à 0. Pour moi, il faut initialiser à une valeur pertinente en fonction de ce que signifie la variable. (Au moins la question ne se pose pas avec le do... while : pas besoin d'initialiser.)
----------
(*) Je crois qu'il vaut -1, mais je ne sais pas si c'est « toujours » ou « en général » et si on est assuré que les prochaines versions du C auront toujours EOF = -1. (Là je chipote...)
Merci pour cet apport. Effectivement, j'ai bêtement pris cette valeur de 0 sans me poser plus de question que ça parce que cela me paraissait dans la ligné de ce que j'ai pu trouver au travers des différents cours / exemples croisés !
int c;
FILE *st=fopen(....);
while((c=fgetc(st))!=EOF)
printf("%c",c);
fclose(st);
- Edité par edgarjacobs 26 octobre 2019 à 22:44:33
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
While, Do while et fgetc
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent