[英]Looping back even the Condition is true in do while loop
当我输入负整数时,它仍会循环返回
#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);
}
您的代码将调用未定义行为 (UB),因为它试图求和为z
,而未初始化使用z
。
初始化为零。
这种情况说:
while (n != 0 || n < 0);
只要n
的值不同于0或小于0,请再次循环。
我猜您想在输入为负数时停止循环,这意味着您需要这样做:
while (n >= 0);
这意味着只要n
为非负数(即0或正数),就可以继续执行do-while循环的主体。
但是,请注意,在for循环中使用该结构后,您将从总和z
提取负数(似乎您希望它是循环的中断信号)。
如果您不希望发生这种情况,则可以使用关键字break
来停止执行循环。
不知道您期望这样做吗:
while (n != 0 || n < 0);
将其翻译成自然语言,它说:“ 只要n
不为0
或小于0
,就循环 ”。
我想现在很明显,第二个条件意味着第一个条件? 仅当n
正好为0
时,此循环才会退出。
请注意,这不是唯一的错误:您很乐意使用z
而不进行初始化,因此最终可以得到任何值( z
的初始值是不确定的 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.