scanf和cin的差異

2022-05-03 17:24:11 字數 975 閱讀 5122

引例:

大家都知道,在c++中有兩種輸入、輸出方式—scanf和cin,但是,它們之間存在的差異,你們知道麼?下面請看測評吧!

測試題目:

輸入n個數,輸出n個數。

測試環境:

ubuntu12.04 i3cpu

4g記憶體 7200轉硬碟

測試結果:

測試結果使用linux的time測試時間,結果如下:

10000組資料時:

real代表程式執行總時間,user代表使用者輸入資料的時間,sys代表系統時間

從上面的測試結果中,貌似沒有發現scanf的厲害之處甚至好像還慢些(資料存在波動性),那我們接著往下看:

100000組資料時:

這時scanf已經開始嶄露頭角了,不過差異還不是很大,咱們接著往下看!

1000000組資料時:

這時候大家可以發現,cin所用的時間是scanf的兩倍還多!!

後面就不繼續往下測的,對這個感興趣或者想自己驗證的童鞋可以繼續。。。。不過據說scanf的輸入速度是cin的3倍多!!

測試總結:

從以上測試結果,大家可以發現scanf和cin的巨大差異了吧!那麼,這個東西最主要在哪應用呢?不用說都能想到,當然是acm平台啦!那些演算法沒問題時間超限的童鞋,你們說不定就是因為用了cin導致的呢!

再大的資料範圍就要

#include#include

using

namespace

std;

#define ll long long//

自定資料範圍

inline ll read()

while(ch>='

0'&&ch<='

9')

return x*f;

}int

main()

更快的我還沒學會。。。

關於cin和scanf速度的問題

在leetcode最優解法中常常看到 int型別引數 static int x string型別引數 int some 查了一下發現是解決 cin,cout效率低的問題 cin cout之所以效率低,是因為先把要輸出的東西存入緩衝區,再輸出,導致效率降低,而這段語句可以來打消iostream的輸入 ...

scanf和cin輸入型別不匹配時造成的死迴圈問題

下面兩段 要實現的功能是往整數變數i中輸入乙個資料,輸入數字1時退出,然而當輸入乙個字元時,整個程式會變成乙個死迴圈。c int i 0 while i 1 c語言 int i 0 while i 1 原因 造成死迴圈的原因也很簡單,當第一次通過scanf函式讀入整數時,如果我們輸入的是乙個字元,那...

為什麼一定情況下scanf比cin快

有時候發現oj時完全沒錯的 死活過不了,超時超時搞得我頭炸掉,而且我敢保證 邏輯等的都是沒有問題的,就是超時。當時只想罵人,後來發現這是我在知識上的缺失。scanf是用指標操作的,沒有型別安全機制。比如乙個char型別資料你就可以用 f獲得輸入,而不會報錯,但在執行時會出現異常。cin是自動判斷你的...