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 : 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;
};
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
 
  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 ...
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 : 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;
}
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 : 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;
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