[C] problème boucle while, NULL, liste chainé

Résolu
jerémiethe7 Messages postés 152 Date d'inscription   Statut Membre Dernière intervention   -  
jerémiethe7 Messages postés 152 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

j'ai un problème avec une liste chainée. Je pense que c'est pas très compliqué cependant j'ai vraiement du mal a comprendre ce qui cloche. Mon problème est une boucle while.

while(strcmp(p_liste->UnContact.numerotel,tel)!=0 && p_liste!=NULL)
{
if(p_liste==NULL)
printf("cest bizarre");
p_liste=p_liste->p_suivant;
printf("%s != %s\t%s\n",p_liste->UnContact.numerotel,tel,p_liste);_sleep(500);
}
printf("\nON PASSE\n");_sleep(1000);

Le problème est simple, je veut arrêter de boucler lorsqu'on a soit NULL dans p_liste soit les 2 numéro de téléphones identiques. Lorsque mon numéro n'est pas dans la liste chainée, on passe sur NULL alors que normalement on devrait pas vu la condition dans le while, non ????

Merci pour l'aide
A voir également:

1 réponse

Mahmah Messages postés 496 Date d'inscription   Statut Membre Dernière intervention   125
 
Bonjour,

Il n'y a pas grand chose à changer ;-)

Ton souci vient de la boucle while. En tout cas il y en a un là.

C'est la condition elle même:

A && B sera vrai si les deux sont vrais. Si A est vrai on regarde si B est vrai, Si A est faux la condition est fausse.

Dans ta boucle arrive le dernier tour où avec p_liste=p_liste->p_suivant; p_liste devient nul.
Puis le test du while suivant : Une comparaison PUIS la vérification du pointeur non nul.

Le test fait que la boucle est effectivement arrêtée mais il y a une vérification avec NULL.
Il faut donc juste inverser les conditions pour que si la première condition est fausse, (p_liste est nul) on n'évalue pas la deuxième.

C'est pareil avec le OU :
A || B Si A est vrai la condition est vraie, si A est faux on évalue B.

M.
-1
jerémiethe7 Messages postés 152 Date d'inscription   Statut Membre Dernière intervention   32
 
merci mahmha,

tu voit des fois on croit tout connaitre sur certaines choses et on ne connait même pas les fondamentaux !!!
En tout cas merci pour ton conseil, ça marche du tonnerre.
Je suis même pas sur qu'on nous l'a expliqué en cours ^^.
++
-1