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