请求成员'next'的东西不是结构或联合错误

use*_*456 2 c

我在这条线上遇到了问题 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);    
}
}
Run Code Online (Sandbox Code Playgroud)

mcl*_*fix 8

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

*c->next=var;
Run Code Online (Sandbox Code Playgroud)

这被评估为:"获取next指向的结构的字段c,然后,遵循它.".由于c不是指针struct film,该next字段不存在.

并且你想要:"对指针进行deference c,并获取next由它产生的指针的字段." 因为它*c 一个指针struct film,因此,next它存在字段.

所以,它是:(*c)->next=var;改变评估中的优先顺序.