可能重复:
如何在C++中将用户输入验证为double?
我是C++的新手,我有一个功能,我希望用户输入一个double值.我如何确保输入的值是正确的数据类型?另外,如何处理错误?目前这就是我的全部:
if(cin >> radius){}else{}
Run Code Online (Sandbox Code Playgroud)
我使用`try {} catch(){},但我不认为这是解决这个问题的正确方法.任何帮助,将不胜感激.
Zet*_*eta 19
如果ostream& operator>>(ostream& , T&)未能提取格式化数据(例如integer,double,float,...),stream.fail()则为true,因此!stream也将评估为true.
所以你可以使用
cin >> radius;
if(!cin){
cout << "Bad value!";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cin >> radius;
}
Run Code Online (Sandbox Code Playgroud)
或者干脆
while(!(cin >> radius)){
cout << "Bad value!";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
Run Code Online (Sandbox Code Playgroud)
这对于ignore该行的其余部分很重要,因为operator>>它将不再从流中提取任何数据,因为它的格式错误.所以,如果你删除
cin.ignore(numeric_limits<streamsize>::max(), '\n');
Run Code Online (Sandbox Code Playgroud)
您的循环将永远不会结束,因为输入未从标准输入中清除.
也可以看看:
std::basic_istream::ignore(cin.ignore)std::basic_istream::fail (cin.fail())std::numeric_limits(用于定义的最大忽略字符数<limits>).