2012/09/18

C 強制資料輸出

無意間發現透過 printf 輸出資料時,程式會將資料放在 buffer 中,過一段時間後再一起印出。
int main(){
   while(1){
      printf(".");
      sleep(1);
   }
   return 0;
}

可以透過 fflush() 強制將 buffer 中的資料輸出:
while(1){
   printf(".");
   fflush(stdout);
   sleep(1);
}

4 則留言:

  1. 在用 printf debug 大法時要注意這個問題 XD

    回覆刪除
  2. 我記得fflush用在stdout會有啥問題的樣子

    我查到另一個辦法是直接改stdout
    setvbuf(stdout, NULL, _IONBF, 0);

    回覆刪除
  3. http://stackoverflow.com/questions/1716296/why-does-printf-not-flush-after-the-call-unless-a-newline-is-in-the-format-strin

    回覆刪除
  4. 糗大....我看反了,是不應該fflush(stdin) /facepalm

    回覆刪除