您的位置:首页 > 其它

用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()
将一个字符放回至输入流
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: