Fonction existe_livre

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

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    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,
    1. 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
      1. Contributeur
        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()...