【问题标题】:program stopped working on switch statement C language程序停止在 switch 语句 C 语言上工作
【发布时间】:2013-07-12 22:08:04
【问题描述】:

我正在为一个类 (C LANGUAGE) 编写一个程序,这将是一个 APP 商店的菜单。在程序中的某个时刻,用户将没有足够的钱从菜单中购买任何东西,所以他需要向他的帐户添加钱,这是我在下面那部分的函数定义。当我运行我的程序时,它会编译并且一切正常,直到它到达下面的 switch 语句,然后程序崩溃但没有出现运行时错误,它说“它已经停止工作”。我以前从未发生过这种情况,我附上了错误消息的屏幕截图。请帮忙,谢谢。

void moneyChoice(double *depositPtr, double appCost)
{
int choice = 0;
printf("\n\nPlease credit your money by selection:\
           \n1 --   $15.00\
           \n2 --   $10.00\
           \n3 --   $5.00\
           \n4 --   $2.00\
           \n5 --   $1.00");
    printf("\nDeposit amount: ");
    scanf("%d", choice);

    switch (choice)
    {
    case 1:
        *depositPtr += 15.00;
        break;
    case 2:
        *depositPtr += 10.00;
        break;
    case 3:
        *depositPtr += 5.00;
        break;
    case 4:
        *depositPtr += 2.00;
        break;
    case 5:
        *depositPtr += 1.00;
        break;
    }

}

【问题讨论】:

  • 您是否尝试过实际调试程序?
  • scanf("%d", 选择); --> 没有地址?是不是和选择?它的写入地址为零,这可能是编译器的第一个区域或类似操作系统使用的东西?。
  • 变量为double deposit = 0;在这个函数中,我的教授要求我使用一个指针,这就是我使用 *depositPtr 作为参数的原因。该网站不让我发布图片,因为它说我需要 10 分的声誉......
  • 非常感谢 huseyin tugrul buyukisik!!!!我正在疯狂地浏览这段代码,并没有注意到我错过了 &。非常感谢

标签: c crash switch-statement


【解决方案1】:

请使用有效的scanf地址,如&choice。

 scanf("%d", &choice);

这使用选择的地址来写入扫描的值。当你写 scanf("%d",choice);它只是将零(选择的初始值)作为地址并导致未定义的行为。

Scanf 需要一个地址,因为它在函数内部改变了它的值。地址显示需要更改的位置(选择值的地址)。与更改 depositPtr 的指向数据类似的方式。

【讨论】:

    猜你喜欢
    • 2021-07-24
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    相关资源
    最近更新 更多