筆試的時候經常遇到突然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(),換行符和回車都會被讀入。