我正在为一个类(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;
}
}
答案 0 :(得分:1)
请使用有效的scanf地址,例如& choice。
scanf("%d", &choice);
这使用选项的地址来写入扫描值。当你写scanf(“%d”,选择);它只是得到零(选择的初始值)作为地址并导致未定义的行为。
Scanf需要一个地址,因为它正在改变函数内部的值。地址显示需要更改的位置(选择值的地址)。与更改depositPtr的指向数据的方式类似。