程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++基礎知識 >> C++ cin輸入流詳解

C++ cin輸入流詳解

編輯:C++基礎知識
標准輸入流是從標准輸入設備(鍵盤)流向程序的數據。在頭文件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 <iostream>
using namespace std;
int main( )
{
   float grade;
   cout<<"enter grade:";
   while(cin>>grade)//能從cin流讀取數據
   {
      if(grade>=85) cout<<grade<<"GOOD!"<<endl;
      if(grade<60) cout<<grade<<"fail!"<<endl;
      cout<<"enter grade:";
   }
   cout<<"The end."<<endl;
   return 0;
}
流提取符“>>”不斷地從流中提取數據(每次提取一個浮點數),如果成功,就陚給 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."。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved