当我输入负整数时,它仍然循环回
#include <stdio.h>
#include <math.h>
int main() {
int n,i,z;
do {
printf("Input: ");
scanf(" %d",&n);
z=z+n;
} while (n != 0 || n < 0);
printf("Sum:%d",z);
}
不确定您期望它做什么:
while (n != 0 || n < 0);
将其翻译成自然语言,它说"只要n
不是0
或小于0
,就循环"。
我想现在很明显,第二个条件意味着第一个条件?只有当n
恰好是0
时,此循环才会退出。
注意,这不是唯一的错误:你很高兴使用z
,而从未初始化过它,所以你最终可以得到任何值(z
的初始值不确定(
您的代码调用未定义的行为(UB(,因为它试图求和到z
,而z
是未初始化的。
将其初始化为零。
此条件表示:
while (n != 0 || n < 0);
只要n
具有与0不同的值或小于0,则再次循环。
我想当输入是负数时,你想停止循环,这意味着你需要这个:
while (n >= 0);
这意味着只要n
是非负数(即0或正数(,就继续执行do while循环的主体。
但是,请注意,在for循环中有了这个结构,你会得到负数(看起来你喜欢它作为循环的中断信号(,它是从和z
中提取的。
如果不希望发生这种情况,可以使用关键字break
来停止循环的执行。