在C中使用while循环的复合条件

时间:2011-10-08 19:42:41

标签: c loops while-loop conditional-statements

当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);

}

3 个答案:

答案 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 您应该始终使用值初始化局部变量。