用cin输入
2015-06-25 19:50
218 查看
用cin输入
cin从输入流中抽取字符,需要转换为相应的类型
可以将hex,oct,dec与cin一起使用
cin>>如何检查输入
cin>>抽取字符时,会跳过空白字符(空格,制表符,换行符)
也就是说,
'\n'、空格啥的不会读取到
如果类型不匹配,
cin>>停止抽取
流状态
cin、
cout均包含一个描述流状态的数据成员。
流状态由三个元素组成:
eofbit,
badbit,
failbit
三个全为
0时,说明一切顺利
流状态详情:C++PrimerPlus page-756
设置状态
clear()与
setstate()可以设置状态,但有区别:
clear(0)或
clear(goodbit)将所有三个状态设置为
0
clear(eofbit)设置
eofbit,其他状态则被清除
setstate(eofbit)设置
eofbit,其他状态不变
I/O和异常
cin.exceptions()有两个版本:
iostate exceptions() const;
void exceptions(iostate except);
第一个版本返回流状态的一个bitmask,可以通过这个bitmask判断属于那种错误
第二个版本中参数
except,比如设置为
eofbit,则当输入时
eofbit被设置后,将会触发
ios_base::failure异常。默认为
goodbit,也就是说,不设置的话,即使有输入错误,也不会触发
ios_base::failure异常
流状态的影响
如果存在
cin失败,会导致后面的输入与输出被关闭,知道标记被清除
cin.clear()可以清除标记,将标记变为
goodbit
但是导致错误的输入还保留在输入流里
可以
while循环
cin.get()读取直到
'\n'
也可以
cin.ignore()做到同样的效果
其他
istream类方法
字符输入
istream & get(char & ch)
读取下一个输入的字符,包括空白字符(
'\n',空格,制表符),返回
istream类,说明可以这样:
cin.get(ch1).get(ch2) >> ch3 ;
遇到EOF,返回
false
int get(void),获取一个字符,将其转化为整型,并返回
遇到EOF,返回EOF
字符串输入
函数 | 区别 |
---|---|
getline(char *, int ) | 分界符默认为'\n' |
getline(char *, int ,char ) | 最后一个参数标志分界符| |
get(char *, int ) | 分界符默认为'\n' |
get(char *, int ,char ) | 最后一个参数标志分界符| |
getline()与
get()的区别:
区别一:
get()函数将
'\n'留在输入流中
getline()函数读取
'\n',然后扔掉
区别二:
超过最大字符数时:
getline()使用
setstate()设置failbit
get()不会设置,可以用
peek()了解
区别三:
输入空行时:
getline()读取
'\n'然后丢掉,字符串为空
get()设置
failbit
其他istream方法
read()读取指定数目的字节,存储在指定位置。不会再末尾添上
'\n'。通常与
ostream的
write()结合使用,用于文件的输入输出
peek()返回输入流中下一个字符,但不会抽取输入流中的字符
gcount()返回最后一个非格式化读取字符串的函数所读取的字符数目
putback()将一个字符放回至输入流
相关文章推荐
- openCV中的人脸识别API
- MySQL数据库基础
- C# 文件与二进制互转数据库写入读出
- 使用cout进行输出
- 网络图片查看器
- win7如何修改系统文件
- 第一次发博客,新手初试啊,题目如下:有两个10个元素的数组,分别为A和B,编程实现相同位置的元素, 如果 B 的元素小于 A 的元素进行数值交换:(使用回调函数实现)
- 黑马程序员---iOS--面对对象的语法
- IO流知识点汇总
- CentOS 7 更新软件源和系统
- java.util.properties使用方法
- 你遇到过最NB开发项目”有奖征文活动
- 旧博客(看那时稚嫩的我。。。)
- 今天遇到奇怪的事:SVN本地代码的标记突然没了,Clean up也报错
- hdu 1083 Courses
- TextRank 自动文摘
- SQL中的重要语句
- ural 1017 Staircases
- Apache重启报错原因
- Behavioral模式之Mediator模式