Bonjour a vous,
Voila mon programme fonctionnait normalement avant que je fasse des modifications sur le module de mes listes chainées qui sont passées de
Maintenant le morceau de code ou ca coince:
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 typedef struct cell{ struct cell *suivant; char *element; }Cellule, *Liste; en typedef struct cell{ struct cell *suivant; char *element; }Cellule; typedef struct Cellule * first; /* Pointeur sur le debut de ma liste */ Cellule * last; /* Pointeur sur la fin de ma liste */ }Liste; /* Autre structure */ struct info { int(*EstOK)(char); Liste *L; };
Voila dans cette fonction, a la sortie de ma fonction lire ma liste contient qu'un seul mot, le mot qu'elle a lu, alors qu'elle devrait contenir toute la liste deja traitée et pas le mot que ma fonction lire a lu
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 struct info t[2]; Liste *liste_separateur = InitListe(); Liste *liste_mot = InitListe(); t[0].EstOK = EstLettre; /* EstLettre teste si le caractere est une lettre */ t[0].L = liste_mot; /* Liste contenant des mots */ t[1].EstOK = EstSeparateur; /* EstSeparateur teste si le caractere est un separateur*/ t[1].L = liste_separateur; /* Liste contenant les separateurs */ while(Lire(in, s, t[z].EstOK) != 0) { if(z==0 && t[z].L->first) { printf("Affiche s: %s\n",s); printf("t[z].L->first->data: %s\n", t[z].L->first->data); /* PB: Affiche s , le mot ne devrait pas etre enregistre ici mais dans la fonction rechercheMot...*/ } result = rechercheMot((t[z].L), s); /* Donne toujours 1 ce qui signifie que le mot est toujours en tete */...
Au fur et à mesure que ma fonction lit dans le fichier ma liste ne contient toujours qu'un seul mot, le mot qui est entrain d'être lu... D'où mon problème
La fonction lire
Je sais pas si vous pourrez m'aider vu les bouts de code que je vous ai fourni mais le programme étant assez long j'ai tenté de donner que les parties qui me semblaient nécessaire, mais merci d'avoir essayé...
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 /* Recupere un mot ou un separateur dans mon fichier f, et l'enregistre dans s, */ int Lire(FILE * f, char s[], int (*EstOK)(char)) { int i = 0, c; while(i < TAILLE_BUFFER - 1 && (c = fgetc(f)) != EOF && EstOK((char)c)) { s[i] = (char)c; i++; } if(c == EOF && i == 0) { return 0; /* Fin de fichier */ } s[i] = '\0'; if(c != EOF && !EstOK((char)c)) ungetc(c,f); return 1; }
J'ai aussi un autre probleme avec ce test:
mon compilateur me gronde me disant:"comparaison est toujours fausse en raison d'une gamme limitée de type de données"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 if((a >= 'A' && a <= 'Z') || (a >= 'a' && a <= 'z') || a == 'é' || a == 'è' || a == 'à' || a == 'ê' || a == 'ï') return 1;
J'ai essayé de remplacer avec la fonction isalpha mais elle ne prend pas en compte les accents... auriez vous une solution pour que tout le mot avec les accents soit pris en compte
Merci encore
Partager