c ++,如何验证数据输入是否为正确的数据类型

Bro*_*ias 11 c++ cin

可能重复:
如何在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)

您的循环将永远不会结束,因为输入未从标准输入中清除.

也可以看看:

  • 你的语句`operator >>`如果格式不正确,将不会从流中提取任何数据也是错误的; 它可以提取_some_数据.(想想一下"1.2e + x"的输入.流只保证一个字符前瞻,直到看到''x'才能检测到错误.所有以前的字符都将被提取.) (3认同)