scanf 和cin 的區別


筆試的時候經常遇到突然string s;cin>>s;

有的時候編譯會錯誤,不知道為什么。

 

今天在練習枚舉類型的時候,也遇到這樣一個問題。

enum weekday{Monday,Tuesday} day;

cin>>day;//報錯

scanf("%d",&day);//正常

周純潔的書上也都是用scanf;看樣子scanf和printf不能隨便丟棄啊。畢竟是標准輸入輸出流,沒有緩存區




scanf是格式化輸入,printf是格式化輸出。
cin是輸入流,cout是輸出流。效率稍低,但書寫簡便。 格式化輸出效率比較高,但是寫代碼麻煩。 流輸出操作效率稍低,但書寫簡便。 cout之所以效率低,正如一樓所說,是先把要輸出的東西存入緩沖區,再輸出,導致效率降低。 緩沖區比較抽象,舉個例子吧: 曾經就遇到過這樣的情況(類似的), int i; cout<<'a'; cin>>i; cout<<'b'; 運行結果什么都沒看到輸出,輸入一個整型比如3再按回車后ab同時顯示出來了。 但是這樣的情況並不是經常發生,是在一些比較大型的工程中偶爾出現,原因是字符a先到了緩沖區,但是沒輸出,等輸入了i,b進入 緩沖區后再一並輸出的。 流輸入也是差不多的。 關於C++中用iostream好還是stdio.h比較好 這個問得的確不好回答了。。 iostream.h和stdio.h是C++的兩個頭文件,里面是對於一些類,操作符,函數的定義,頭文件本身應該沒有好壞之分吧~~
————————————————————————————————————————————————————————
 
又查了一下,最新的G++,cin已經比scanf快了,ACM如果scanf超時的話可以用G++提交一下試一下,呵呵,不過,我以后還是打算老老實實的用scanf。。 
 
cin的實時性較差,因為它使用了緩沖區,一般情況下滿了才刷新的。
對於字符:cin的輸入忽略空格和回車。scanf("%c",&i)等價於i = getchar(),換行符和回車都會被讀入。


免責聲明!

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



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