C:简单的程序编译很好但在某一点崩溃

时间:2013-12-13 07:14:45

标签: c arrays struct crash

当我使用或显示它们时,所有值似乎都应该是它们应该存在的位置,但出于某种原因,每当我到达某个点(在代码中标记)时,程序就会崩溃。

程序应该是为数组添加结构。此结构包含另一个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);
}

提前感谢您提供任何帮助。

3 个答案:

答案 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);