Problème de listes chainées
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
Code:
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;
}; |
Maintenant le morceau de code ou ca coince:
Code:
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 */ |
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 :roll:...
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
Code:
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;
} |
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é...
J'ai aussi un autre probleme avec ce test:
Code:
1 2 3
|
if((a >= 'A' && a <= 'Z') || (a >= 'a' && a <= 'z') || a == 'é' || a == 'è' || a == 'à' || a == 'ê' || a == 'ï')
return 1; |
mon compilateur me gronde me disant:"comparaison est toujours fausse en raison d'une gamme limitée de type de données"
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