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()是忽略缓冲区中指定个数的字符
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()是忽略缓冲区中指定个数的字符
相关文章推荐
- C++设计模式之策略模式
- C++读取INI配置文件
- C++primer学习:拷贝控制(7):对象移动
- VC++ 在两个程序中 传递字符串等常量值的方法:使用了 WM_COPYDATA 消息的
- C/C++中<>和“”的区别
- C语言生成随机数
- C++用数组存放数据
- C++ 数组array与vector的比较
- C语言中switch case语句的嵌套
- 1042. 字符统计(20)
- 【C++】define的用法注意
- [C++] How to prevent memory leaks
- 用宏换参
- [C++] 2D Array's memory allocation
- C++有符号和无符号之间的转换
- C语言 概念整理 第一章 我梦老师倾情奉献
- C++ 多态的实现机制
- effective c++ 在资源管理类中小心copying 行为
- VC++ 控制外部程序,向外部程序发送一个消息的方法
- c++ 读取所有图片