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

Résolu/Fermé
jerémiethe7 Messages postés 152 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 27 février 2009 - 2 mai 2008 à 11:04
jerémiethe7 Messages postés 152 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 27 février 2009 - 2 mai 2008 à 11:59
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 lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125
2 mai 2008 à 11:30
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 dimanche 2 décembre 2007 Statut Membre Dernière intervention 27 février 2009 32
2 mai 2008 à 11:59
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