c++ 要求double型变量 输入的只能是数字,输入字母报错并返回

我定义了一个double f;
让后让你输入一个数字cin>>f;
如果输入的是double型的数字,则没有问题,
但是如果输入一个字母如"n"
则会进入死循环
请问怎样才能防止这一问题

这样说吧 C++在输入中能实现类型检查
cin是标准流对象
>>是数据析取运算符(将流中的数据送往变量中)——就是在这个过程对流中的数据进行类型检查
正如你的
double f;
cin>>f;
如果输入了非double型数据,
1、cin的一些状态位会改变(这些状态位用来流对象(例如cin)是否可以正常使用)
2、cin对象中还有剩余的数据(f为double型,你输入其它类型数据,>>不能将所有数据正常送往f中)
所以,两个函数:
cin.sycn();//清空cin中残余数据(缓冲数据)
cin.clear();//将cin的所有状态位恢复为可用(正常)
比如,现在需要输入一个double型数据,输入任何其他情况都重新输入:

double f;
cin>>f;
while(!cin){
cout<<"error,input again:";
cin.sycn();
cin.clear();
}

这样就行了
我实在是没有分了 这么高的分 我当然得争取一下下 希望采纳 还可以讨论
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-20
使用类似下面的判断方法就可以了。
流如果不能成功将数据转换为需要的类型,流就会处于错误状态。

double f;
cin >> f;
if (!cin)
{
cout << "Incorrect number!";
}

如果你想要流从错误状态中恢复过来,
使用 cin.clear(); 注意,此时流中的内容还在。如果你想清除流中的内容,使用cin.sync();

比如你想要int a, b; cin >> a >> b; 如果用户输入了字母,那么两次cin都会失败,如果你想要在cin >> a后继续让用户输入b,你需要这么做:
cin >> a;
if (!cin)
{
cin.clear();
cin.sync();
}
cin >> b;本回答被提问者和网友采纳
第2个回答  2012-10-20
可以cin.getline()获得一个字符串;
分析字符串,如果是数字串,让它通过,并提取出数字,否则,失败。
第3个回答  2012-10-20
先定义一个字符型的变量,然后检查是数值和还是其他的,用ASCII码来分辨数值和字母就行了。
相似回答