您的位置:首页 > 编程语言 > C语言/C++

C++输入流cin方法详解

2015-10-24 21:45 225 查看
一、istream类定义了cin对象,其包含常用的输入方法:cin>>、cin.get()和cin.getline(),分别阐述此三种输入方式的特性。此三个函数都是从输入流的缓冲区(FIFO结构)读取字符。每次读取指定数目的字符,若输入流缓冲区不为空,即输入流缓冲区有剩余字符,则不再等待用户从键盘键入数据,而是直接从输入流缓冲区读字符。

1.cin>>中,“>>”被重载为输入运算符,从输入的第一个有效字符(除空格Space、制表符Tab、回车Enter)起,cin识别输入字符串末尾的空格Space、制表符Tab、回车Enter作为结束字符,读取有效字符串,并在有效字符串末尾添加空字符'\0'填入到指定内存中,同时将结束字符留在输入流缓冲区中。此外cin>>ch,当参数ch为char型字符而非指针或数组名时,cin读入单个字符,并可跳过space、Tab、Enter.

2.cin.get()有四种定义,无参定义调用(char ch = cin.get())、单参调用(cin.get(char ch))、两参调用(cin.get(char *ch,int size))和三参调用(cin.get(char *ch,int size,char
ch)):无参调用和单参调用功能相同,都是从输入流读入一个字符,cin.get()返回值是字符型(char),cin.get(char ch)返回值是istream类型;两参调用中size指明要读取的字符个数,当输入字符数小于size时,两参cin.get从输入流读取全部字符(除换行符‘\n’外)并在字符串末尾添加‘\0’,然后填到指针ch指向的内存空间,当输入字符数不小于size时,两参cin.get函数从输入流读取size-1个字符,并在末尾加上空字符'\0'填到指定内存中,三参的cin.get中的ch
形参指明了终止符,功能与两参类似。

3.cin.getline函数有两种定义,两参和三参。在正常情况下(输入字符数(纯输入字符,不含回车'\n')小于size),cin.getline函数读取全部输入(含换行符'\n'),并将换行符'\n'置换为空字符'\0',然后将结果填入指定内存空间。非正常情况下(输入字符数不小于size),cin.getline读取size-1个字符,在尾端添加空字符'\0'并填入指定内存,别高兴太早,虽本次读取操作正确,但是接下来的输入操作将报错,原因是getline设置了失效位failbit,关闭了后面的输入。

二、流状态的控制

以下代码用于输出failbit、eofbit、badbit、goodbit几个标志的常量值

cout<<"ios::eofbit:"<<ios::eofbit<<endl;

cout<<"ios::badbit:"<<ios::badbit<<endl;

cout<<"ios::goodbit"<<ios::goodbit<<endl;

以下代码用于输出failbit、eofbit、badbit、goodbit几个标志当前的状态,1表示可用,0表示错误状态

cout<<"cin.fail():"<<cin.fail()<<endl;

cout<<"cin.eof():"<<cin.eof()<<endl;

cout<<"cin.bad():"<<cin.bad()<<endl;

cout<<"cin.good:"<<cin.good()<<endl;

3、cin.clear()、cin.sync()、cin.ignore()用法

cin.clear()是将错误状态更改为有效状态

cin.sync()是清除缓冲区中的未读信息

cin.ignore()是忽略缓冲区中指定个数的字符
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: