2012-10-31 111 views
1

在評論第2行「Hello」之後打印九次,但評論第1行輸出「Hello」超過九次。我的問題是這個'\ n'的作用是什麼?' n'除了打印換行符還有什麼其他功能?

#include<stdio.h> 
#include<stdlib.h> 

int main() 
{ 
    int tmp[10], i, n=0; 

    for(i=0;i<9;i++) 
    { 
     tmp[i]=fork(); 
     if(tmp[i]>0) 
      break; 
     else 
     { 
      printf("Hello\n"); //  ---- Line 1 
      printf("Hello "); //  ---- Line 2 
     } 
    } 
} 
+3

我不認爲這個問題是由'\ n'造成的 – jondinham

+0

[在fork()打印兩次之前的語句可能重複](http://stackoverflow.com/questions/10700192/statement-before-fork-printing -兩次)。不同的代碼,但同樣的問題。 – AnT

回答

2

\ n也刷新標準輸出緩衝區。如果它不存在,則可能是以前在其中輸入了數據。沖洗也意味着它會在\ n處理完成後立即強制printf在屏幕上打印。否則,它是緩衝輸出,你永遠無法預測OS將緩衝你的輸出多久,以及它何時精確地選擇實際打印。

2

您可能是緩衝區刷新沒有發生的受害者。 '\ n'在字符串的末尾使輸出緩衝區刷新。如果輸出緩衝區沒有被刷新,那麼你也可以從前面的printf調用中獲得一些輸出。所以最好在打印字符串的末尾使用'\ n'來確保我們刷新緩衝區。 你可以看看question

相關問題