Vraissemblablement car le fichier n'a pas pu être ouvert. Voilà l'occasion d'apprendre une nouvelle fonction de la librairie c: perror(). Remplace, ligne 25, printf("....") par perror("...."). Tu auras déjà une raison plus précise pour laquelle le fichier n'a pas pu être ouvert (n'existe pas, pas les droits....)
Edit: au fait, pas besoin de fermer le fichier s'il n'a pu être ouvert....
- Edité par edgarjacobs 24 septembre 2018 à 20:00:40
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
1) D'abord, ton code ne marchera pas s'il n'y a qu'une ligne de mot dans mots.txt et que tu ne mets pas de retour à la ligne à la fin du fichier, ou si les mots sont séparés par plusieurs '\n' et un tas d'autres cas. Je t'invite à essayer mon code, peu importe les '\n' que tu mets entre les mots il ne va compter que les lignes qui ne sont pas vides.
#include <stdio.h>
int nb_mots() {
int mots=0;
char maintenant, avant='\n';
FILE *f=NULL;
f=fopen("mots.txt", "r");
if(f) {
do {
maintenant=fgetc(f);
/*Si ça passe à la ligne, et que le caractère précédent n'est pas
un passage à la ligne aussi alors on incrémente "mots"
PS: donc on n'incrémente pas si on a \n\n à la suite*/
if(maintenant=='\n' && avant!='\n') mots++;
/*Si c'est la fin du fichier et qu'on a lu au moins un caractère
autre que \n (ca veut dire que le fichier n'est pas vide de mot)
Alors on incrémente encore "mots"*/
if(maintenant==EOF && avant!='\n') mots++;
avant=maintenant;
}
while(maintenant!=EOF);
//On ferme le fichier
fclose(f);
}
else {
//S'il y a quelconque erreur nous empêchant d'ouvrir le fichier
perror("Erreur");
}
//On retourne le nombre de mots
return mots;
}
int main() {
printf("Le nombres de mots: %d\n", nb_mots());
return 0;
}
2) Mets le fclose() dans le if, comme dit edgarjacobs, inutile de fermer ce qui n'a jamais été ouvert.
3) Des fois les gens (sous windows) créent des fichiers *.txt et mettent un .txt à la fin du coup le vrai chemin du fichier est mots.txt.txt parce que windows masque par défaut les extensions qu'il connait, tu devrais afficher les extensions pour voir si c'est le chemin vers mots.txt est correct. Tu peux aussi aller dans cmd et taper:
cd "C:\chemin\vers\ton projet"
dir
Vérifie le nom de mots.txt et si ton exécutable est dans le même dossier. Tu peux faire un printf("%s", argv[0]); pour voir si ton exécutable s'exécute vraiment dans le même dossier que mots.txt.
4) Mets perror("Erreur"); dans le else pour voir pourquoi il ne peux pas l'ouvrir
- Edité par Malice13 28 septembre 2018 à 17:34:05
Malice13
TP pendu, compter les mots d'un fichier
× 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
Malice13