C++中的cin函数和异常的来源(failbit)与处理(clear)

cin小知识点

可以将hex,oct,dec控制符与cin一起使用,来指定输入解释为16,8,10进制格式。

例如:下列语句可以将12或0x12解释为16进制的12或10进制的18,将ff(FF)解释为10进制的255.

cin>>hex;

cin>>机制:

跳过空白(空格,换行符,制表符),直接在输入流中抽取非空白字符。

cin的成员函数

cin.get()与cin.getline()


具体内容请看C++中cin和cout中不会被注意的细节

这里解释一下第3个参数——分界符。就是指当遇到分界符时,输入将终止,不写的话默认为换行符(‘\n’)。分界符可以是任意字符(如‘5’,‘q’等)。


cin.ignore()

istream& ignore(int = 1 , int = EOF);

将读取并丢弃接下来的1(第一个参数)个字符或直到达到第一个文件结尾符号(第二个参数)。

第一个参数指定要读取的最大字符数;另一个用作输入分界符。

cin.ignore(255,'\n');//将读取并丢弃接下来的255个字符或直到达到第一个换行符。

cin.read()

不会在输入后加上空值字符,与ostream write()函数结合使用,返回类型为istream&,(大部分情况下,也就是cin),可以进行拼接。

char name[123];
char book[100];
cin.read(name,123).read(book,100);//就是读123个和100个字符(而不是122和99加上‘\0’)

cin.peek()

(peek偷看)返回输入中的下一个字符,但不抽取输入流中的字符。即查看下一个字符。

char ch;
ch = cin.peek();

cin.gcount()

返回最后一个非格式化收取方法读取的字符数。(格式化就是用cin>>抽取的字符,非格式化就是像cin.getline()等方法读取的字符)。等价于cin.get+strlen函数的联合,速度没相比较来看也慢。

int a = cin.gcount();

cin.putback()

将一个字符插入到输入字符串中的最前面。

peek()等价于get(ch)+putback(ch)。

char ch = 'a';
cin.putback(ch);

cin中的异常与清除

出现异常会怎么样

当cin出现异常,cin将返回false(可用于if和while的判断中),在清除状态位之前(3个状态位都为0),cin将不会被执行,会跳过cin执行后面的程序。

什么时候会出现异常

流状态由3个ios_base元素组成:eofbit,badbit,failbit。每个元素都是一位,为1(设置)或0(清除)。

当cin操作到达文件尾部时,它将设置eofbit;

当cin操作未能读取到预期的字符时,它将设置failbit;

一些无法诊断的失败破坏流时,,它将设置badbit。

怎么检查

用cin中的成员与成员函数(使用成员函数时前面要加cin.)

怎么清除(设置状态)

clear()与setstate()。

clear()将状态设置为他的参数。默认为0(就是无参数),将清除全部3个状态位。

cin.clear();//将清除全部3个状态位,时cin可以重新使用
cin.clear(eofbit);//eofbit位将被设置(1),另外两个状态被清除
setstate()只影响其参数中已设置的位
cin.setstate(eofbit);//设置eofbit位,而不影响其他位



  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值