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位,而不影响其他位



猜你喜欢

转载自blog.csdn.net/lingfeng2019/article/details/78463012