關於ios::sync_with_stdio(false)的一些問題


使用ios::sync_with_stdio(false)可以讓cin讀入的更快,它的原理是使本該同步的輸入輸出流分開,就是讓c風格的輸入輸出流和c++的輸入輸出流分開。

舉一個具體的例子,在正常c++中,當我們用cin輸入整數,當我們在鍵盤上輸入的時候,我們輸入的東西進到了緩沖區,假設我們輸入了

6 3

兩個數之間有空格,最后有回車

這些東西都進入了緩沖區,然后cin從緩沖區中讀取這些字符,cin會一直讀取到空格或者回車,第一個cin讀到6,6之后的空格沒有讀,還在緩沖區中,接下來第二個cin會忽略掉空格,讀取了3,在讀到回車前結束,這時候緩沖區中還有個回車,如果接下來我們想用gets來讀取字符串,那么gets會讀到回車后結束,因為這時候緩沖區中正好就有個回車,所以gets會直接讀到那個回車,然后結束讀入,所以我們輸入的字符並沒有被gets讀到,一般這個時候都會再定義一個字符c來吃掉回車。

如果這時候,我們在前邊寫了ios::sync_with_stdio(false)那么c的緩沖區和c++的緩沖區就會分開,還是進行和剛才同樣的操作的話,這時候cin后的回車停留在了c++的緩沖區中,而gets是c函數,所以這時候gets是從c的緩沖區中讀入字符,而這時c的緩沖區什么也沒有,所以gets就等待輸入,所以我們就把字符輸入進了gets,而並沒有用到用來吃掉回車的字符。


免責聲明!

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



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