簡體   English   中英

if語句在內部,而依賴於依賴的同一個變量

[英]if statement inside while that depends on the same variable that while depends on

考慮以下計划。 我想知道為什么這些代碼以不同的方式表現。提前提前。

這不打印任何

#include <stdio.h>

int main() {
    int i = 0;

    while(i < 10) {
        if(i < 7)
            printf("value is%d", i++); 
    }
}

雖然這樣做

#include <stdio.h>
int main() {
    int i = 0;

    while(i < 10) {
        if(i < 7)
            printf("value is%d\n", i++);
    }
}

首先請注意,您的程序永遠不會退出 i擊中7它的游戲結束了,你的卡住永遠無所事事。

第二個注意事項唯一的區別是打印一個新行。 這應該是你的線索。 由於循環是無限的,你永遠不會打印新的行或退出 - 兩個東西都沖洗STDOUT。 直到你刷新STDOUT,你只是在緩沖區中累積你想要打印的內容。 只有沖洗才會在屏幕上顯示,並清潔緩沖區。

@chux增加了一個好點:

STDOUT(或IN或ERR)的緩沖是實現定義的,意味着Linux,Windows等的不同風格可能顯示不同的行為。 顯然在OP STDOUT中是緩沖的 - 因為沒有輸出。

當您使用printf()它只是將您的數據放入STDOUT緩沖區,其目的不是顯示在屏幕上。 但是當你在printf()使用\\n時,如果在屏幕上刷新STDOUT緩沖區。 如果你不使用\\n你也可以使用fflush() 來自fflush() 手冊

對於輸出流,fflush()強制通過流的底層寫入函數寫入給定輸出或更新流的所有用戶空間緩沖數據。 對於輸入流,fflush()會丟棄從底層文件中提取但尚未被應用程序消耗的任何緩沖數據。 流的打開狀態不受影響。

請閱讀本文

例如,在打印的東西中簡單地包括“\\ n”通常會刷新它(因為stdout在連接到終端時默認是行緩沖的)。

#include<stdio.h>
int main() {
    int i=0;
    while(i<10) {
        if(i<7)
            printf("value is%d",i++);
        fflush(stdout);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM