当amt为0直到输入10个数字后,程序忽略停止。输入10个数字后,程序也不会停止。我的错误在哪里?
main() {
int amt;
int tot = 0; /* running total */
int i = 0; /* counts number of times in loop */
while (amt!=0 || i < 10)
{
printf("Enter a number (enter 0 to stop): ");
scanf("%d", &amt);
tot = tot + amt;
i++;
}
printf("The sum of those %d number is %d.\n", i, tot);
}
答案 0 :(得分:3)
您的测试在分配amt
之前进行。因此,其结果是不确定的。该测试应移至迭代结束,即do/while
。虽然您可以将amt
分配给某些非零值,但这对我来说有点不整洁。
当然你的意思是使用逻辑AND而不是逻辑OR?如果amt
都为非零且i<10
,则您只想继续迭代。
当然,如果你确实将测试移到了迭代的末尾,那么你必须考虑到i
在循环内增加的事实。
答案 1 :(得分:2)
为了在10个数字或amt = 0之后停止(以先到者为准),您必须将循环条件更改为while (amt!=0 && i < 10)
答案 2 :(得分:1)
int amt;
因为你没有初始化它。它有一些随机值,导致程序中的Undefined Behavior 您应该始终使用值初始化局部变量。