2

我正在为一个类(C 语言)编写一个程序,这将是一个应用商店的菜单。在程序的某个时刻,用户将没有足够的钱从菜单中购买任何东西,所以他需要向他的帐户添加钱,这是我在下面那部分的函数定义。当我运行我的程序时,它会编译并且一切正常,直到它到达下面的 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;
    }

程序崩溃的截图}

4

1 回答 1

1

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

 scanf("%d", &choice);

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

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

于 2013-07-12T22:12:52.347 回答