我在这行c->next=var;有问题

我的功能是:

{
    struct film
    {
        int id;
        char nom[50];
        char typeFilm[50];
        int duree;
        int dateSortie;
        struct film *next;
    };

#include<stdio.h>
#include<string.h>
#include "structure_film.h"
#include<stdlib.h>

void ajouter_film(struct film **h,struct film **c)
{
    struct film *var;
    int s, genre;
    do
    {
        var=(struct film*) malloc(sizeof(struct film));
        printf("quel est le nom du film que vous voulez ajouter ? \n");
        scanf("%s",var->nom);
        printf("\nquel est le type de ce film \n 1-action \n 2-aventure \n 3-romantique \n 4-comedie \n");
        scanf("%d",&genre);

        switch(genre)
        {
            case 1 :
                strcpy((var->typeFilm),"action");
                break;
            case 2 :
                strcpy((var->typeFilm),"aventure");
                break;
            case 3 :
                strcpy((var->typeFilm),"romantique");
                break;
            default :
                strcpy((var->typeFilm),"comedie");
        }
        printf("\nquel est sa duree ? \n");
        scanf("%d",&var->duree);
        printf("\nveuillez entrez le numero de reference de ce film : \n");
        scanf("%d",&var->id);
        printf("\nquel est l'annee de sortie? \n");
        scanf("%d",&var->dateSortie);

        if (*h==NULL)
        {
            *h=var;
            *c=var;
        }
        else
        {
            printf("i'm in else \n");
            *c->next=var;
            *c=var;
            var->next=NULL;
        }
        printf("si vous voulez ajoutez un autre film veuillez tapez 1 si non tapez 0 \n");
        scanf("%d",&s);
    }
    while (s!=0);
}
}

最佳答案

问题是这里的操作数的优先级:

*c->next=var;

评估为:“取next指向的结构的字段c,然后对其进行引用”。由于c不是struct film的指针,因此next字段不存在。

并且您想要:“引用指针c,并采用由此产生的指针的字段next。”因为*c 指向struct film的指针,因此,存在next字段。

因此,它是:(*c)->next=var;更改评估中的优先顺序。

07-24 09:46
查看更多