繁体   English   中英

在do while循环中即使条件为true也会循环返回

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM