我在这行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;
更改评估中的优先顺序。