当我使用或显示它们时,所有值似乎都应该是它们应该存在的位置,但出于某种原因,每当我到达某个点(在代码中标记)时,程序就会崩溃。
程序应该是为数组添加结构。此结构包含另一个struct
以及表示数量的int。它们也存储在一个数组中。
包括崩溃周围的main.c和函数。
int main()
{
int choice;
int item_num;
int item_amount;
printf("*****MEAL PLANNER*****");
while(choice != 0)
{
prepopulate();
printf("\n\nTo view items, enter 1. \nTo view current menu, enter 2. \nTo add an item to the menu, enter 3. \nEnter 0 to exit.\n\n");
scanf("%d", &choice);
if(choice > 0 && choice < 5)
{
switch(choice)
{
case 1 : printf("\nView Items\n\n");
displayAllFoodStuff();
break;
case 2 :printf("\nView Current Menu\n\n");
display_meal();
break;
case 3 :printf("\nAdd Item to Menu\n\n");
printf("Enter item number.\n");
scanf("%d", &item_num);
printf("Enter item amount.\n");
scanf("%d", &item_amount);
if(item_num <= fs_count)
{
printf("Enter 1 to confirm.\n");
scanf("%d", choice);
fflush(stdin);
////////CRASHING HERE!!!////////
if(choice == 1)
{
choose_food_item(food_list[item_num], item_amount);
}
break;
}
else
{
printf("\nThat is not a valid entry.\n");
}
break;
default: choice = 0;
break;
}
}
}
return 0;
}
功能
//Define 'add_food_plan_item' function.
void add_food_plan_item(food_plan_item fs)
{
meal[item_count] = fs;
item_count++;
}
//Define 'choose_food_item' function.
void choose_food_item(food_stuff fs, int qty)
{
food_plan_item fpi;
fpi.fs = fs;
fpi.qty = qty;
add_food_plan_item(fpi);
}
提前感谢您提供任何帮助。
答案 0 :(得分:3)
scanf()
指向它读取输入的变量。
您可以使用choice
&
的地址来执行此操作
scanf("%d", &choice);
答案 1 :(得分:3)
您将选择传递给scanf,但您打算通过&amp; choice。您的代码应为:
scanf("%d", &choice);
scanf需要一个地址才能将值写入。您传递的是值而不是值的地址,因此scanf将该值视为地址。因此,假设选择是一个值为0的变量。传递选择值而不是其地址会导致scanf尝试写入地址0.这通常会导致分段错误。
答案 2 :(得分:0)
fflush(stdin);
是未定义的行为,可能是导致崩溃的原因!!!
正如其他人指出的那样,您在&
scanf
(运营商地址)
此外,请勿使用fflush(stdin)
,而是要清除stdin
,您可以执行以下操作...
int c;
while ((c = getchar()) != '\n' && c != EOF);