C cin輸入流詳解

2021-06-27 00:23:20 字數 1600 閱讀 6155

標準輸入流是從標準輸入裝置(鍵盤)流向程式的資料。在標頭檔案iostream.h中定義了cin、cout、cerr、clog 4個流物件(詳情請檢視:

與c++輸入輸出有關的類和物件

),cin是輸入流,cout、cerr、clog是輸出流。

cin是istream類的物件,它從標準輸入裝置(鍵盤)獲取資料,程式中的變數通過流提取符「>>」從流中提取資料。流提取符「>>」從流中提取資料時通常跳過輸入流中的空格、tab鍵、換行符等空白字元。

注意:只有在輸入完資料再按回車鍵後,該行資料才被送入鍵盤緩衝區,形成輸入流,提取運算子「>>」才能從中提取資料。需要注意保證從流中讀取資料能正常進行。

例如:int a,b;

cin>>a>>b;

若從鍵盤上輸入

21  abc↙

變數a從輸入流中提取整數21,提取操作成功,此時cin流處於正常狀態。但在變數b準備提取乙個整數時,遇到了字母a,顯然提取操作失敗了,此時,cin流被置為出錯狀態。只有在正常狀態時,才能從輸入流中提取資料。

當遇到無效字元或遇到檔案結束符(不是換行符,是檔案中的資料已讀完)時,輸入流cin就處於出錯狀態,即無法正常提取資料。此時對cin流的所有提取操作將終止。在 ibm pc及其相容機中,以ctrl + z表示檔案結束符。在unix和macintosh系統中,以 ctrl + d表示檔案結束符。當輸入流cin處於出錯狀態時,如果測試cin的值,可以發現它的值為false(假),即cin為0值。如果輸入流在正常狀態,cin的值為true(真),即cin為 乙個非0值。可以通過測試cin的值,判斷流物件是否處於正常狀態和提取操作是否成功。如:

if(!cn) //流cin處於出銷狀態,無法正常提取資料

cout<<"error";

[例13.5] 通過測試cin的真值,判斷流物件是否處於正常狀態。

#include

using

namespace std;

intmain()

cout<<

"the end."

}

流提取符「>>」不斷地從流中提取資料(每次提取乙個浮點數),如果成功,就陚給 grade,此時cin為真,若不成功則cin為假。如果鍵入檔案結束符,表示資料已完。

運**況如下:

enter grade: 67↙

enter grade: 89↙

89 good!

enter grade: 56↙

56 fail!

enter grade: 100↙

100 good!

enter grade: ^z↙//鍵入檔案結束符

the end.

在遇到檔案結束符時,程式結束。如果某次輸入的資料為

enter grade: 100/2↙

流提取符">>"提取100,賦給grade,進行if語句的處理。然後再遇到"/",認為是無效字元,cin返回0。迴圈結束,輸出"the end."。

在不同的c++系統下執行此程式,在最後的處理上有些不同。以上是在gcc環境下執行程式的結果,如果在vc++環境(筆者使用win7系統)下執行此程式,在鍵入ctrl + z 時,需要敲擊兩次回車,程式才輸出"the end."。

C語言 詳解輸入流

c的輸入流 int scanf const char restrict format,函式 scanf 是從標準輸入流stdio 標準輸入裝置,一般指向鍵盤 中讀內容的通用子程式,可以說明的格式讀入多個字元,並儲存在對應位址的變數中。函式的第乙個引數是格式字串,它指定了輸入的格式,並按照格式說明符解...

標準輸入流

get 從流中提取字元,包括空格 read 無格式輸入指定位元組數 getline 從流中提取一行字元 ignore 提取並丟棄流中指定字元 peek 返回流中下乙個字元,但不從流中刪除 gcount 統計最後輸入的字元個數 seekg 移動輸入流指標 int get cin.get char rc...

緩衝輸入流

快取輸入流 bufferedinputstream繼承於filterinputstream,提供緩衝輸入流功能。緩衝輸入流相對於普通輸入流的優勢是,它提供了乙個緩衝陣列,每次呼叫read方法的時候,它首先嘗試從緩衝區裡讀取資料,若讀取失敗 緩衝區無可讀資料 則選擇從物理資料來源 譬如檔案 讀取新資料...