在某題的輸出混用了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」之類的警告。
如果再修改一下程式:
這回程式的輸出就又正確了。因為flush強制清空了緩衝區,將其中的內容輸出。#include
using
namespace
std;
int main()
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。尤其是如果你的程式...