码迷,mamicode.com
首页 > 其他好文 > 详细

cin标准输入流详解

时间:2015-06-23 06:07:10      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

  标准输入流指的是从输入设备(如键盘)中向程序输入数据.在头文件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头文件定义的流使用的最大值,你也可以用一个足够大的整数代替它。

 

cin标准输入流详解

标签:

原文地址:http://www.cnblogs.com/wuyoucao/p/4594367.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!