1. 程式人生 > >cin作為判斷條件時

cin作為判斷條件時

正常 一個 end 計算 pre out als 標準類型 etl

關於cin

cin是istream類的對象,它是從標準輸入設備(鍵盤)獲取數據,(此外,cout是流的對象,即ostream類的對象,cerr是標準錯誤輸出流的對象,也是ostream 類的對象。這裏的標準輸出和標準錯誤輸出指的是終端的屏幕) 程序中的變量通過流提取符">>"從流中提取數據。流提取符">>"從流中提取數據時跳過輸入流中的空格、tab鍵、換行符等空白字符。註意:只有在輸入完數據再按回車鍵後,該行數據才被送入鍵盤緩存區,形成輸入流,提取運算符">>"才能從中提取數據。需要註意保證從流中讀取數據能正常運行。
  

例如:
    int a,b;
     cin
>>a>>b;     

若從鍵盤中輸入21 abc回車,變量a從輸入流中提取整數21,提取操作成功,此時cin流出於正常狀態。但在變量b準備提取一個整數時,遇到了字母a,顯然提取操作失敗了,此時,cin流被置為出錯狀態。只有在正常狀態,才能從輸入流中提取數據。

字符輸入的流成員函數
  除了可以用cin輸入標準類型的數據外,還可以用istream類流對象的一些成員函數,實現字符的輸入。如cin.get(),cin.getline(字符數組(或字符指針),字符個數n,終止標誌字符)

eof函數
  eof是end of file 的縮寫,表示“文件結束”。從輸入流讀取數據,如果到達文件末尾(遇到文件結束符),eof函數值為非零值(表示真),否則為0(表示假)。

peek函數
  peek是觀察的意思,peek函數的作用是觀測下一個字符。   調用形式為c=cin.peek();

putback函數
  調用形式為cin.putback(ch)   其作用是將前面用get或者getline函數從輸入流中讀取的字符ch返回到輸入流,插入到當前指針的位置,供後面讀取。

ignore函數
  調用形式為cin.ignore(n,終止字符)   函數作用是跳過輸入流中n個字符,或在遇到指定的終止字符時提前結束(此時跳過包括終止字符在內的若幹字符)。

cin的狀態標示符:

cin.fail(); 可查詢當前的狀態標識符

while(cin>>n)

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

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

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

總結:cin是一個istream的對象,判斷時會檢查流的狀態,流有效返回ture,當文件結束符或者無效的輸入(比如用一個字符來作為一個整型數的輸入時)時,返回false。

註:windows環境下ctrl+z 結束輸入 ctrl+c直接結束數據(數據不會進去緩存區)

cin作為判斷條件時