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

cin標准輸入流詳解,cin輸入流詳解

編輯:C++入門知識

cin標准輸入流詳解,cin輸入流詳解


  標准輸入流指的是從輸入設備(如鍵盤)中向程序輸入數據.在頭文件iostream.h中定義 cin,cout,cerr對象.cin是輸入流,其他都為輸出流.

  in是istream的對象,它從輸入設備中獲得數據.輸入的實際過程是:首先輸入完數據按下回車,空格等空白字符後,該數據就被送入鍵盤緩沖區,形成了一個輸入流,然後通過提取運算符"
>>"從流中提取數據給程序賦值.

  需要注意的是cin在賦值的時候會對數據類型進行檢查,cin中有一個狀態提示符,用來表示cin是否正確工作,如果類型不匹配狀態提示符變成'1',正常時為'0',一旦變為'1',cin便無法再進行賦值.

這時便需要cin,clear(),cin.sync(),cin.ignor()

下面用實例進行說明

#include<iostream>
using namespace std;

int main()
{
	int a;
	cout << "輸入一個字符:"<<endl;
	cin >> a;
	//cin.clear();
	//cin.sync();
	cout << "failbit=" << cin.fail() << endl;      //沒有進行錯誤的處理,輸出1
	cout << "輸入一個數字:"<<endl;
	cin >> a;					//無法輸入,現在cin還未恢復正常
	cout << "failbit=" << cin.fail() << endl;	//任然為1
	cin.clear();
	//cin.sync();
	cout << "failbit=" << cin.fail() << endl;       //通過cin.clear()使狀態標識符恢復正常'0'
	cout << "輸入一個數字:"<<endl;
	cin >> a;					//無法輸入,雖然通過cin.clear()使cin恢復正常,但緩沖區的數據還存在,故直接將原來的字符數據賦給a
	cout << "failbit=" << cin.fail() << endl;	//由於類型不匹配再次出錯
	cin.clear();
	cin.sync();
	cout << "輸入一個數字:"<<endl;
	cin >> a;
	cout << "failbit=" << cin.fail() << endl;       //通過cin.clear()重置流,通過cin.sync()清空流,即清空緩沖區數據,然後便可重新輸入
	system("pause");
	return 0;
}

  cin.clear()作用是重置流,使cin>>可以再次賦值,但並沒有清除流中的數據.所以cin.clear()一般和cin.sync()連用.

 

  cin.ignor()作用和cin.sync()作用類似,但它並不是清空整個流,而是部分清除,可以人為控制的,如清理掉當前行,或者清除掉行尾的換行符.ignor的作用顯然是更精確的控制緩沖區數據.

比如可以這麼用:

cin.ignore(1024,'\n'),通常把第一個參數設置得足夠大,這樣實際上總是只有第二個參數'\n'起作用,所以這一句就是把回車(包括回車)之前的所以字符從輸入緩沖(流)中清除出去。

下面是部分用法:

cin.ignore(numeric_limits<std::streamsize>::max(),'/n');//清除當前行

cin.ignore(numeric_limits<std::streamsize>::max());     //清除cin裡所有內容

不要被長長的名字嚇倒,numeric_limits<std::streamsize>::max()不過是climits頭文件定義的流使用的最大值,你也可以用一個足夠大的整數代替它。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved