問題

為什麼printf在呼叫後不會沖洗,除非newline以格式字串?這是POSIX行為嗎?我怎麼可能每次都有printf立即沖洗?

  最佳答案

stdout流預設情況下是緩衝的行,因此只會在到達換行後顯示緩衝區中的內容(或者當它被告知).您有幾個選項可以立即列印:

列印到stderr而不是使用fprintf(stderr預設情況下未緩衝):

 fprintf(stderr, "I will be printed immediately");
 

每當您需要使用fflush時沖洗stdout:

 printf("Buffered, will be flushed");
fflush(stdout); // Will now print everything in the stdout buffer
 

編輯:從Andy Ross下面的評論,您也可以使用setbuf禁用stdout上的緩衝:

 setbuf(stdout, NULL);
 

  相同標籤的其他問題

cprintfflush