cout與printf的混用問題

2021-07-16 15:05:32 字數 847 閱讀 8943

在某題的輸出混用了cout與printf(),結果輸出的順序出錯。

把原因歸結為乙個帶緩衝而乙個不帶緩衝。

因為stdio.h中定義了像ungetc()這樣的函式,其作用是將字元放回到輸入流中。可見stdio中也是使用了緩衝的。

那麼為什麼cout與printf()混用會發生問題呢?

#include 

using

namespace

std;

int main()

輸出為:

aaabbb

沒有問題。

如果將程式修改一下:

#include 

using

namespace

std;

int main()

輸出成了:

bbbaaa

順序發生了錯誤。

sync_with_stdio()是在中定義的,當其接受true作為引數時,將會同步iostream與stdio中的流操作。預設是true,因此第乙個程式的結果是正確的。

然而,儘管c++標準中規定stdio sync標誌預設是true,不同平台下的不同編譯器可能並不完全支援這個標準。因此也就有了通常意義上的關於「不要混用iostream與stdio」之類的警告。

如果再修改一下程式:

#include 

using

namespace

std;

int main()

這回程式的輸出就又正確了。因為flush強制清空了緩衝區,將其中的內容輸出。

cout和printf的混用而產生的順序問題

之前對於cout與printf 混用的結果的認識,源於某年北京賽區某judge的總結。據其稱,某隊在比賽時某題的輸出混用了cout與printf 結果輸出的順序出錯。其把原因歸結為乙個帶緩衝而乙個不帶緩衝。對此金強提出了置疑,因為stdio.h中定義了像ungetc 這樣的函式,其作用是將字元放回到...

《轉》cout和printf的混用而產生的順序問題

之前對於cout與printf 混用的結果的認識,源於某年北京賽區某judge的總結。據其稱,某隊在比賽時某題的輸出混用了cout與printf 結果輸出的順序出錯。其把原因歸結為乙個帶緩衝而乙個不帶緩衝。對此金強提出了置疑,因為stdio.h中定義了像ungetc 這樣的函式,其作用是將字元放回到...

C 中cout與printf區別

vc環境c 測試乙個判斷系統是大小端的程式時候遇到了問題,如下 加入了改正後的cout與printf對比 include include using namespace std union endian void main 所以沒有特殊要求,請不要混用iostream和stdio。尤其是如果你的程式...