您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關c++中cin如何作為while條件的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
本文一切測試在windows clion中進行
在clion中,ctrl +z并不是文件結束符
在cmd中運行,只需要ctrl+z再加回車就可以得到正確結果
1、cin
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狀態無效。
一下這段測試代碼將說明以上問題。
代碼作用: 統計輸入值中數據連續出現的次數。
因為無法判斷輸入數據的個數,所以無法采用一個定值來控制循環次數。這里我們使用cin來作為if 條件:
#include <iostream> using std::cin; using std::cout; using std::endl; int main() { cout << "Enter a list of integers:" << std::endl; int currVal = 0; int val = 0; int cnt = 0; /*讀入第一個輸入的數據*/ if ( cin >> currVal ){ cnt = 1; /*循環讀入之后的數據*/ while( cin >> val ){ /*如果當前讀入的數據val與之前的數據currVal相等,cnt++*/ if (currVal == val) { ++cnt; } else { /*如果不相等,輸出之前數據currVal連續出現的次數,同時重新統計當前數據的連續出現次數*/ cout << currVal << " occurs " << cnt << " times. " << endl; currVal = val; cnt = 1; } } /*打印最后一個數據的連續出現次數*/ cout << currVal << " occurs " << cnt << " times. " << endl; } return 0; }
(1)控制臺輸入 1 2 3 4 5 6 7加回車:
7的統計并沒有顯示,因為這個時候我們只是將數據push到了緩沖區,while中的cin讀取到7,流的檢測狀態是true,所以并沒有退出循環,還在等待下一個輸入數據,不能執行while循環之外的代碼,因此不能打印最后下一個數據7。
(2)控制臺輸入 1 2 3 4 5 6 7加ctrl+D:
直接以ctrl+d結束數據,數據1到7沒有提交到緩沖區,而if中的cin直接讀取到文件結束符,流狀態檢測為false,if中的代碼不能執行,直接結束程序運行。
(3)控制臺輸入1 2 3 4 5 6 7加回車:
再輸入ctrl+D:
1到6的輸出如(2)中所述,等我們再次輸入文件結束符號時,cin流狀態為false,結束while循環,因此執行while循環之外的代碼,打印出最后一個數據7 的統計次數。
(4)控制臺輸入1 2 3 4 5 6 7 t 加回車:
我們輸入1到7和t之后,再enter,將數據push到緩沖區。在while循環的條件中,cin逐個讀入到val中,再執行循環體中的代碼,最后讀到t時,企圖將字符存入到int型的變量中,無效輸入導致流狀態為false,種植while循環,可以打印出最后一個數據的統計信息。
感謝各位的閱讀!關于“c++中cin如何作為while條件”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。