skulls94
Messages postés5Date d'inscriptionsamedi 29 octobre 2005StatutMembreDernière intervention 4 juillet 2008
-
18 avril 2007 à 12:24
skulls94
Messages postés5Date d'inscriptionsamedi 29 octobre 2005StatutMembreDernière intervention 4 juillet 2008
-
19 avril 2007 à 18:57
bonjour, je dois faire un programme qui lit un fichier mot à mot et qui les stocke dans une liste chainée seulement si ils ne sont pas deja present.
voici une partie de mon code:
else
{
printf("P->chaine dans else=%s\n",P->chaine);
if(P->chaine==mot) fprintf(fp2,"%d",i);// cas où le mot est le 1er de la liste.
Mon soucis c'est que "P->chaine" contient tjrs le mot en cours de lecture au lieu de garder en memoir le precedent. Je ne vois pas à quelle moment il fait l'affectation P->chaine=mot en cours de lecture et pourtant le dernier printf affiche bien le dernier mot lu...
Merci
yoyo269
Messages postés1403Date d'inscriptionlundi 23 février 2004StatutMembreDernière intervention11 janvier 20092 19 avril 2007 à 17:26
Salut !
Ya un souci ici : if(P->chaine==mot) fprintf(fp2,"%d",i);// cas où le mot est le 1er de la liste.
Essaye plutôt ça à la place :
if(!strcmp(P->chaine, mot)) fprintf(fp2,"%d",i);// cas où le mot est le 1er de la liste.
skulls94
Messages postés5Date d'inscriptionsamedi 29 octobre 2005StatutMembreDernière intervention 4 juillet 2008 19 avril 2007 à 18:57
salut yoyo,
merci pour ta reponse mais cela ne resoud pas mon probleme, car P->chaine==mot à chaque incrementation de la boucle.
Concernant le 1er mot du fichier on entre bien dans la condition:
if(P==NULL)
{ P=enfin(P,mot); //
printf("P->chaine ds p0=%s\n",P->chaine);
}
Et pour les mots suivants le printf : if(P!=NULL) printf("P->chaine =%s\n",P->chaine);
s'effectue bien, ce qui prouve qu'une liste chainée a été créé et elle devrait contenir le premier mot, or ce printf va indiquer le mot qui est en cours de lecture dans le fichier, c'est là le probleme a mon avis.
Je ne comprends pas comment cela est possible, vu que je ne fait aucune affectation avant if(P==NULL).