Fonction existe_livre

Fermé
ouled omar ilyes - 9 janv. 2014 à 17:15
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 9 janv. 2014 à 19:23
Bonjour,



cher amis, mon probleme de cette fonction est comme suit: cette fonction ne peut pas lire p->next, j'est tout essayé, mais rien :/
voici la structure


typedef struct livre1
{
char nom[20];
char auteur[20];
int edition;
int nbre_copie;
char code[20];
struct livre1*next1;
}livre;

et voici la fonction



int existe_livre(livre*tete,char nom, char auteur,int edition )
{
livre*p=NULL;
p=(livre*)malloc(sizeof(livre));
p->next1=NULL;
p->next1=(livre*)malloc(sizeof(livre));
p=tete;
while((p->next1!= NULL)&&(p->nom!=nom || p->auteur!=auteur||p->edition!=edition))
{
p= p->next1;
}
if(p->next1!=NULL)
{
return 1;
}
else
{
return 0;
}
}

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
9 janv. 2014 à 17:27
Bonjour,

En première lecture :

p->nom!=nom || p->auteur!=auteur
Attention nom est un char au lieu d'être un char*. Même remarque pour auteur => Modification du prototype de la fonction existe_livre().

Pour comparer des chaînes de caractères, on utilise la fonction strcmp().
Ce qui donnerait : strcmp(p->nom,nom)!=0 || ...

Tiens compte de ces remarques. Recompile ton code. Et s'il reste des erreurs, reposte ton code en le mettant entre les balises "codes" (situé à droite du bouton "souligné" et choisis "C" dans la liste déroulante). N'oublie pas de mettre également les messages (erreurs et warnings) indiqués par ton compilateur.

Cdlt,
0
ouled omar ilyes
9 janv. 2014 à 19:00
merci, mais j'ai mis pas des pointeur sur des chaines, juste j'ai mis une variable chaine
-> p->auteur est une chaine, ce n'est pas un pointeur
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
9 janv. 2014 à 19:23
Tu as mis en argument de la fonction char auteur au lieu de char *auteur ou char auteur[]. C'est comme tu veux mais ça ne change rien.
Ensuite tu cherches à comparer les chaines et non les pointeurs ! Comparer les pointeurs revient à comparer l'adresse mémoire du heap où ils pointent. Toi ce que tu cherches, c'est comparer les chaines, c'est à dire les lettres composant le nom de l'auteur. Donc strcmp()...
0