while(std::cin>>val)怎么結束的思考


參考: https://blog.csdn.net/u014182411/article/details/62053816/

---------------------------------------------------------------

cin是C++編程語言中的標准輸入流對象,即istream類的對象。cin主要用於從標准輸入讀取數據,這里的標准輸入,指的是終端的鍵盤。此外,cout是流的對象,即ostream類的對象,cerr是標准錯誤輸出流的對象,也是ostream 類的對象。這里的標准輸出指的是終端鍵盤,標准錯誤輸出指的是終端的屏幕。

       在理解cin功能時,不得不提標准輸入緩沖區。當我們從鍵盤輸入字符串的時候需要敲一下回車鍵才能夠將這個字符串送入到緩沖區中,那么敲入的這個回車鍵(\r)會被轉換為一個換行符\n,這個換行符\n也會被存儲在cin的緩沖區中並且被當成一個字符來計算!比如我們在鍵盤上敲下了123456這個字符串,然后敲一下回車鍵(\r)將這個字符串送入了緩沖區中,那么此時緩沖區中的字節個數是7 ,而不是6。

       cin讀取數據也是從緩沖區中獲取數據,緩沖區為空時,cin的成員函數會阻塞等待數據的到來,一旦緩沖區中有數據,就觸發cin的成員函數去讀取數據。當cin>>從緩沖區中讀取數據時,若緩沖區中第一個字符是空格、tab或換行這些分隔符時,cin>>會將其忽略並清除,繼續讀取下一個字符,若緩沖區為空,則繼續等待。但是如果讀取成功,字符后面的分隔符是殘留在緩沖區的,cin>>不做處理。 

       使用一個istream的對象作為條件時,效果是檢查流的狀態。若流有效,則檢測成功,返回true。當遇到文件結束符或者無效的輸入(比如用一個字符來作為一個整型數的輸入時),istream的對象狀態會變為無效。

總而言之:

(1)  輸入數據時需要敲回車鍵才能將數據送到緩存器,cin才能讀取緩存區的數據。

(2) 當cin遇到文件結束符(windows中為:ctrl +Z , Unix 中為:ctrl +D),或無效輸入才能使cin狀態無效。

一下這段測試代碼將說明以上問題。

代碼作用: 統計輸入值中數據連續出現的次數。
---------------------
作者:遠走的兔子
來源:CSDN
原文:https://blog.csdn.net/u014182411/article/details/62053816
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

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



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