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

轉載自:http://www.cnblogs.com/xudong-bupt/p/3653191.html


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

看如下的代碼:

#include <stdio.h>
int main()
{
    int i=0;
    printf("%d %d",i++,i++);
    printf(" %d",i++);
    return 0;
}

輸出結果:

1 0 2

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

2.printf/cout 有行緩衝區

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

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

看如下的代碼:

#include <iostream>
using namespace std;
int main()
{
    int i=0;
    cout<<i++<<","<<i++;
    //cout.flush(); //刷新緩衝區
    while(1){
        //break;
    }
    return 0;
}

執行程序(linux):

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

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

  1 0



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章