由于函数中的结构重复导致的 c 分段错误
c segmentation fault due to duplicacy in structure in functions
程序第一次运行正常,但是如果我们想添加另一本书的详细信息,在我输入第一个属性后出现分段错误
int main()
{
float count_tot=0,profit_tot=0;
char option='y';
fflush(stdin);
struct book b;
while(option!='n')
{
b=getinput();
display(b);
b.need= calcneed(b);
b.profit=calcprofit(b);
printf("Need To Order:%d\n",b.need);
printf("Total Cost:%f\n",(b.need-b.qtyonhand)*b.price_sin);
printf("do another book(Y/n)");
scanf("%c",&option);
option=getchar();
count_tot+=(b.need-b.qtyonhand)*b.price_sin;
profit_tot+=b.profit;
}
drawline();
printf("TOTAL PROFIT:%f\n",profit_tot);
printf("TOTAL COST:%f\n",count_tot);
return(0);
}
struct book getinput
{
struct book b;
scanf("%d",&b.book_code);
...
...
} //the function contains a number of scanf functions
您正在函数 getinput
中创建一个局部变量并查看其用法,并将其返回给调用者。您最好将结构作为参数传递并将数据读入该结构。函数终止时结构的本地副本被销毁,除非您使用动态内存分配。
程序第一次运行正常,但是如果我们想添加另一本书的详细信息,在我输入第一个属性后出现分段错误
int main()
{
float count_tot=0,profit_tot=0;
char option='y';
fflush(stdin);
struct book b;
while(option!='n')
{
b=getinput();
display(b);
b.need= calcneed(b);
b.profit=calcprofit(b);
printf("Need To Order:%d\n",b.need);
printf("Total Cost:%f\n",(b.need-b.qtyonhand)*b.price_sin);
printf("do another book(Y/n)");
scanf("%c",&option);
option=getchar();
count_tot+=(b.need-b.qtyonhand)*b.price_sin;
profit_tot+=b.profit;
}
drawline();
printf("TOTAL PROFIT:%f\n",profit_tot);
printf("TOTAL COST:%f\n",count_tot);
return(0);
}
struct book getinput
{
struct book b;
scanf("%d",&b.book_code);
...
...
} //the function contains a number of scanf functions
您正在函数 getinput
中创建一个局部变量并查看其用法,并将其返回给调用者。您最好将结构作为参数传递并将数据读入该结构。函数终止时结构的本地副本被销毁,除非您使用动态内存分配。