afin d'améliorer le jeu du pendu demandé dans le TP (langage C) je souhaite compter le nombre de mots contenu dans un fichier txt.
Pour mettre fin à la lecture de mon fichier j'ai la condition suivante: while(caractereActuel != EOF); Mais mon EOF n'est pas reconnu et la boucle s'effectue indéfiniment ! Voici mon code complet:
#include <stdio.h>
#include <stdlib.h>
int caractereActuel=0;
int nbrDeMot=0;
int main(int argc, char *argv[])
{
FILE* fichier = NULL; // on cree un pointeur de FILE initialisé à NULL
fichier = fopen("essai1.txt", "r+");
//on va tester si l'ouverture du fichier c'est bien passé
if (fichier != NULL)
{
// On peut lire et écrire dans le fichier
do
{
do
{
caractereActuel = fgetc(fichier); // On lit le caractère
printf("%c", caractereActuel); // On l'affiche
} while (caractereActuel != '\n'); // On continue tant que fgetc n'a pas retourné fin de ligne
nbrDeMot = nbrDeMot +1;
}while(caractereActuel != EOF);
printf("Ce fichier contient %d lignes\n",nbrDeMot);
printf("EOF = %d", EOF); //permet d'afficher la valeur retournee par EOF sur mon OS
fclose(fichier); // On ferme le fichier qui a été ouvert
}
else
{
// On affiche un message d'erreur si on veut
printf("Impossible d'ouvrir le fichier arbre.txt");
}
return 0;
}
Bonjour ! Question bête : est-ce que le fichier se termine obligatoirement par un '\n' ? Si ce n'est pas le cas, c'est la boucle interne qui ne peut pas se terminer lorsqu'il lit la dernière ligne. Peut-être faudrait-il que le while interne ressemble à ça (mais je n'ai pas testé, c'est juste une idée) :
while ((caractereActuel != '\n') || (caractereActuel != EOF))
D'ailleurs, il faut vérifier le dernier caractère pour savoir s'il faut ajouter une ligne ou non. Si la dernière ligne ne contient pas de '\n' elle ne sera pas comptabilisée par un algo qui compte les \n'...
Au pire, on peut compter les lignes à coups de fgets(), mais ça peut foirer si une ligne est plus grande que la limitation que tu donnes à fgets().
à noter que sous le bloc-note de windows, un retour à la ligne est automatiquement effectué après 1024 caractères, mais sans pour autant introduire '\r' +'\n'. Ce n'est donc que visuel, pas effectif.
Argh, la faute d'inattention ! Il faut bien sûr mettre && et pas ||
- Edité par robun 20 février 2017 à 8:58:57
EOF non reconnu
× 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.
Bonhomme !! | Jeu de plateforme : Prototype.