C/C++中printf/cout 計算順序與緩沖區問題


1.printf/cout在同一個語句中都是從右向左計算的

看如下的代碼:

1 #include <stdio.h>
2 int main()
3 {
4     int i=0;
5     printf("%d %d",i++,i++);
6     printf(" %d",i++);
7     return 0;
8 }

輸出結果:

1 0 2

(第5行,先計算右邊的i++,再計算左邊的i++。所以輸出時1 0)

2.printf/cout 有行緩沖區

直到緩沖區滿,或者遇到換行符,或者程序結束,或者刷新緩存,才進行輸出。

C使用fflush(stdout)刷新緩沖區;C++中使用cout.flush()刷新緩沖區。

看如下的代碼:

 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int i=0;
 6     cout<<i++<<","<<i++;
 7     //cout.flush(); //刷新緩沖區
 8     while(1){
 9         //break;
10     }
11     return 0;
12 }

執行程序(linux):

  沒有任何輸出,因為沒有遇到換行符、程序也沒有結束。

把第7行的注釋取消掉,進行刷新緩沖區就可以看到執行結果:

  1 0

 

參考鏈接:

http://hi.baidu.com/wjtk007/item/5eb65c03c0dd97066c9048c7


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM