下面是cin の show time
cin如何检查输入
不同版本的抽取运算符(>>)查看输入流的方法是相同的.他们跳过空白(空格,换行符,和制表符)直到遇到非空白字符,但在C的单字符模式下,>>它读取从非空白字符开始,到与目标类型不匹配的第一个字符之间全部内容;
例如:
运算符将读取前四个.因为他们都是有效的整数.但Z不是.有的时候键入可能没有满足程序的期望,比如输入的是ZCAR,而不是-123Z,这种情况下程序不会修改elevation的值,并返回0;
流状态
流状态由3个ios_base元素组成: eofbit,badbit, failbit.其中没一个元素都是一位(1或0); 当cin操作达到文件末尾时,它将设置eofbit; 当cin操作未能读取到预期的字符时,他将设置failbit; 当一些无法诊断的失败破坏流时,它将设置badbit;当三个状态为都为0时表示一切顺利,(他为什么这么熟练啊);
下表列出了位和一些报告或改变流的ios_base方法;
书上的表格奉上:
其他istream类方法
○ get(char &)和getline(void)方法读取下一个输入字符,即使他是空格,制表符,换行符;
○ get(插入, int, char)和getline(char,int,char)在默认情况下读取一行;
单字符输入:
get(char &)
假设有如下代码
通过get(ch),代码读取,显示,并考虑空格和可打印字符;
假设程序使用>>:
代码将首先跳过空格.并且循环不会停止.因为>>跳过了换行符,所以换行不会被赋值给ch,所以循环不会被终止.
成员函数get(void)
get(void)尘缘函数还读取空白.但使用返回值来将输入传递给程序:
到达文件尾的时候.cin.get(void)都会返回值EOF(iostream的一个符号常量).可以利用此特型这样来读取输入:
字符串输入: getline(),get()和ignore();
istream & get(char *, int, char);
istream & get(char *, int);
istream & getline(char * int, char)
istream & getline(char * int)
第一个参数用于放置输入字符串的内存单元的地址.第二个参数是要读取的最大字符数+1(+1是因为要存结尾的空字符);第三个参数用于指定用作分节符的字符;上述函数都在读取最大数目的字符或遇到换行符后停止; get()和getline()最大的差距就是,get()将换行符留在输入流中,也就是截下来的输入操作首先看到的是遗留下的换行符;而getline()舍弃换行符;
ignore()
接受两个参数: 一个是数字,指定要读取的最大字符数; 另一个是字符,用作输入分界字符;
比如: cin.ignore(255,'\n')
调用读取并丢弃接下来的255个字符,或直到遇到个换行符为止;
|
|
其他istream方法
read(), peek(), gcount() putback().
read()函数读取指定数目的字节,并将它们存在指定的位置中,并返回istream & 且 read()不会在输入后加上空字符,对于处理文件的输入输出,通常和write()配合使用; 比如:
peek()函数能查看下一个字符,但不提取他.
while((ch = cin.peek()) != '.' && ch != '\n') //用while检查下一个字符是否是'.'或'\n'
;
gcount() 方法返回最后一个非格式化抽取方法(非>>)读取的字符数; 但对于strlen()还是setlen速度较快…
putback() 函数将一个字符插入到输入字符串中.被插入的字符串将是下一条输入语句读取的第一个字符..他返回istream & (可以拼接);并且他允许将字符插入到不是刚才读取的位置..是不是想到了什么? peek..没错peek()的效果相当于使用get()读取一个字符,然后使用putback()放回去….