2012-09-16 63 views

回答

9

std::endl具有打印換行符'\n'字符,然後刷新輸出流的效果。

的等價的C,如果你打印到標準輸出,將是:

putchar('\n'); 
fflush(stdout); 

但在大多數情況下fflush是不必要的。

請注意,std::endl確實不是的目的是提供一個平臺無關的行結束。字符'\n'已經是一個平臺無關的行結束。當寫入文本流時,它將被轉換爲平臺使用的任何行(Windows的\r\n,Unix的\n等)。

+0

我主要是在尋找一個與平臺無關的行結束,但你做出了一個好點。我沒有意識到endl會刷新輸出流,但'\ n'不一定會刷新標準輸出。 –

+0

@ user1212596:查看我最新答案的最後一段。 –

+0

啊...我學到了很棒的東西! –

5
#include <stdio.h> 

putchar ('\n'); /* To the stdout stream. */ 
printf ("\n"); /* Ditto. */ 

而對於任意流fp

fputc (fp, '\n'); 

這應該行緩衝和無緩衝流工作。如果你想立即看到結果,完全緩衝的流需要一個fflush(NULL)。那哪個是哪個?來自C99標準的血統細節:

當最初打開時,標準錯誤流沒有完全緩衝; 如果 和只有當流可以確定不參考 交互式設備時,標準輸入和標準輸出流完全緩衝。

+0

難道你不是指'fflush(fp)'? – jamesdlin

+0

不一定。 'fflush(NULL)'刷新所有*流。 – Jens

2

std::endl刷新流,但在C中打印換行符不這樣做。所以你必須使用fflush

+3

在C中,它也被沖洗爲線緩衝和無緩衝的流。 – Jens