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中的异常与清除
出现异常会怎么样
什么时候会出现异常
流状态由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位,而不影响其他位