Possible Duplicate:
how do I validate user input as a double in C++?
I am new to C++, and I have a function in which I am wanting the user to input a double
value. How would I go about insuring that the value input was of the correct datatype? Also, how would an error be handled? At the moment this is all I have:
if(cin >> radius){}else{}
I using `try{}catch(){}, but I don't think that would the right solution for this issue. Any help would be appreciated.
If ostream& operator>>(ostream& , T&)
fails the extraction of formatted data (such as integer, double, float, ...), stream.fail()
will be true and thus !stream
will evaluate to true too.
So you can use
cin >> radius;
if(!cin){
cout << "Bad value!";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cin >> radius;
}
or simply
while(!(cin >> radius)){
cout << "Bad value!";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
It is important to ignore
the rest of the line, since operator>>
won't extract any data from the stream anymore as it is in a wrong format. So if you remove
cin.ignore(numeric_limits<streamsize>::max(), '\n');
your loop will never end, as the input isn't cleared from the standard input.
See also:
std::basic_istream::ignore
(cin.ignore
)std::basic_istream::fail
(cin.fail()
)std::numeric_limits
(used for the maximum number of ignored characters, defined in <limits>
).