Bonjour
J'ai voulu calculer le nombre de caracteres dans une ligne dans un fichier texte mais j'ai une boucle infini j'ai debuger mais j'ai compris ou est le problemes
Voici mon code source
MotCache.c
util.c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 #define TAILLE_MAX_MOT 300 #include <stdlib.h> #include <stdio.h> #include "util.h" int nbLigne(FILE* fichierGrille); int nbColonne(FILE* fichierGrille); int testFichierVide(FILE* fichier); int tailleFichier(FILE* fichier); int main(int argc ,char* argv[]){ FILE* fichierGrille = fopen("grilleTest1.txt","r"); FILE* fichierMotATrouver = fopen("motAChercher.txt","r"); int i=0; if(fichierGrille==NULL && fichierMotATrouver==NULL){ print_erreur(FICHIER_OUVERTURE_ERREUR); } else if(tailleFichier(fichierGrille)==0){ print_erreur(FICHIER_GRILLE_ERREUR); } else if (tailleFichier(fichierMotATrouver)==0 ){ print_erreur(FICHIER_LISTE_MOTS_VIDE_ERREUR); }else{ int comptColonne=0; while(fgetc(fichierGrille)!='\n'){ comptColonne++; } /*if(fichierMotATrouver==NULL){ print_erreur(FICHIER_OUVERTURE_ERREUR); }else{ }*/ int res= nbLigne(fichierGrille); int res2 =nbColonne(fichierGrille); printf("Le nombre de ligne est %d\n",res); printf("Le nombre de colonne est %d\n",res2); } fclose(fichierGrille); fclose(fichierMotATrouver); } int nbLigne(FILE* fichierGrille){ int compteurLigne=0; char mot[TAILLE_MAX_MOT]; while(!feof(fichierGrille)){ fgets(mot,TAILLE_MAX_MOT,fichierGrille); compteurLigne++; } return compteurLigne; } int nbColonne(FILE* fichierGrille){ int car; int comptColonne=0; while(car =fgetc(fichierGrille)!='\n'){ printf("%c",car); comptColonne++; } return comptColonne ; } int tailleFichier(FILE* fichier){ fseek(fichier,0,SEEK_END); long lfile=ftell(fichier); return lfile; }
util.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 #include "util.h" static char * tostring(int dir) { switch(dir) { case S : return "S"; case N : return "N"; case E : return "E"; case O : return "O"; case NE : return "NE"; case NO : return "NO"; case SE : return "SE"; case SO : return "SO"; default : return "erreur de direction"; } } /** * À utiliser pour afficher la taille et le nom d'un élément */ void print_position_mot(char * mot,int ligne, int colone, int direction) { printf("%s %d %d %s\n",mot,ligne,colone,tostring(direction)); } void print_erreur(int err) { switch (err) { case FICHIER_GRILLE_ERREUR : printf("Erreur : fichier de la grille corrompu ou vide\n"); break; case FICHIER_LISTE_MOTS_VIDE_ERREUR : printf("Erreur : Fichier vide\n"); break; case FICHIER_OUVERTURE_ERREUR : printf("Erreur : ouveture du fichier\n"); break; case NBRE_ARGUMENTS_ERREUR : printf("Erreur : nombre d'arguments incorect\n"); break; case MOT_NON_TROUVE_ERREUR : printf("--ERREUR--\n"); break; default: break; } }
grilleTest1.txt
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 #ifndef UTIL_H #define UTIL_H #include <stdio.h> #include <stdlib.h> #define S 0 #define N 1 #define E 2 #define O 3 #define NE 4 #define NO 5 #define SE 6 #define SO 7 //Fichier de la gille corrompu ou vide #define FICHIER_GRILLE_ERREUR 1 //Fichier liste de mots vide #define FICHIER_LISTE_MOTS_VIDE_ERREUR 2 //Erreur d'ouverture d'un fichier #define FICHIER_OUVERTURE_ERREUR 3 //Nombre d'arguments reçu inadéquat #define NBRE_ARGUMENTS_ERREUR 4 // Mot non trouvé dans la grille #define MOT_NON_TROUVE_ERREUR 5 /** * À utiliser pour afficher les erreurs */ void print_erreur(int err); /** * À utiliser pour afficher la position d'un mot dans la grille */ void print_position_mot(char * mot,int ligne, int colone, int direction); #endif
motAChercher.txt
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 BONJOURETSET XLZABCRXRTSR CAXFGKLUMNPQ CVYKPDOPSRVN EARJZJQMDNCB FLMPWUQAMTPY
La boucle infini est dans la fonction nbColonne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 BONJOUR
Merci d'avance.
Partager