C++ 的cin输入注意【转】----cin的状态
来源:互联网 发布:数据库管理软件做什么 编辑:程序博客网 时间:2024/05/29 06:28
C++ 的cin输入注意【转】
我们定义要输入到的变量是整型,但如果我们输入了英文字母或者汉字,那就会发生错误,不能继续输入或操作。
你可以在程序中添加如下程序,来清空cin的输入缓冲区重新输入
if(!cin)
{
cout<<"输入有错!请重新输入"<<endl;
cin.clear();
cin.sync(); //清空流
}
cin.sync(); 这个是用来清空cin缓冲区里面未读取的信息...
例如:
#include <iostream>
using namespace std;
void main()
{
int n;
cout<<"请输入数字:";
while(!(cin>>n))
{
cin.sync();//清除缓冲区
cin.clear();//清除错误状态,在这个程序里,两个必须一起用,否则 达不到效果
cout<<"您只能输入数字,请重新输入:";
}
}
1、每一个输入(输出)对象就代表一个输入(输出)流
2、输入(输出)对象中的流状态成员标记了输入(输出)流当前的状况,当eofbit、badbit、failbit三个标记位均为0时表示流状态正常
3、一但某个或几个标记位被设置,表示对象的流状态出现相应状况,流将对后面的输入(输出)关闭,直到标记位被清除
4、只有在流状态良好的情况下,if或者while对该输入(输出)对象的判断才能是true
cin.clear(); //清除cin流的错误状态
C++语句cin.clear();中的clear()是什么函数,原型是?
答:检举将一个出错的流的状态恢复为“好”。但也不完全是,因为它也可以把“好”的流变成“坏”。
其默认参数为:
ios::goodbit
故语句:
cin.clear()
清除cin流,并设置goodbit状态位。
同理,语句:
cin.clear(ios::failbit)
清除cin流,并设置failbit状态位,该位代表一般可修复的小错误,自然还可以设置其他几个状态位,但普通情况下,很少用到。还是以goodbit位用的最多。由于它是默认参数,所以不需显示传递,故而你最常看到的就是:
cin.clear() 这句了。
cin状态【转】
1、cin状态有下面几种:
常量
含义
failbit标记位的值
eofbit标记位的值
badbit标记位的值
转化为10进制
ios::failbit
输入(输出)流出现非致命错误,可挽回
1
0
0
4
ios::badbit
输入(输出)流出现致命错误,不可挽回
0
0
1
2
ios::eofbit
已经到达文件尾
0
1
0
1
ios::goodbit
流状态完全正常
0
0
0
0
分别对应cin.fail(),cin.bad(),cin.eof(),cin.good()
2、了解几种cin与状态有关的函数
(1)cin.sync() 清除缓冲区
(2)cin.clear() 清除cin错误状态
cin.clear()用法如果输入发生错误发生,那么流状态既被标记为错误,你 必须清除这些错误状态,以使你的程序能正确适当地继续运行。要清除错误状态,需使用clear()函数。
(3)cin.ignore(int n,char c)
cin.ignore( 5, 'c' ) 的是从输入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用。每抛弃一个字符,它都要计数和比较字符:如果计数值达到5或者被抛弃的字符是'c',则cin.ignore() 函数执行终止;否则,它继续等待。 它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。
比如可以这么用:cin.ignore( 1024, '\n' );,通常把第一个参数设置得足够大,这样实际上总是只有第二个参数 '\n' 起作用,所以这一句就是把回车(包括回车)之前的所以字符从输入缓冲(流)中清除出去。
- C++ 的cin输入注意【转】----cin的状态
- C++ 的cin输入注意【转】----cin的状态
- 输入流cin的状态
- cin 流的状态
- cin输入的问题
- C++:cin、cin.getline()、getline()的用法
- C++:cin\cin.getline()\getline()的用法
- cin输入流的中要注意点
- 关于输入流状态函数cin.eof()的问题
- 关于cin输入的问题
- C++ cin输入的问题
- 注意当cin.getline、和cin 合用的时候
- c++cin输入
- cin>>i的返回值的问题 & cin输入流
- cin.get(),cin,cin.getline()的区别
- cin,cin.get,cin.getline的区别
- 关于输入流状态函数cin.eof()的问题(转)
- 关于输入流状态函数cin.eof()的问题(转)
- AS3做的FLV播放器(教程)
- SWFObject 2.0官方文档
- 抽象类
- Tweenlite的用法
- memset函数的使用及注意事项
- C++ 的cin输入注意【转】----cin的状态
- 灾害监测小卫星星座一组轨道设计参数
- Qt QImage QPainter
- 使用silverlight制作热点地图
- Ruby 正则表达式
- poj 1159 palindrome
- 清楚cin错误状态的代码
- dnspod opensource
- 关于VisualStudio性能分析数据中的独占样本数和非独占样本数的意义