簡體   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