c++cin

c++, how to verify if the data input is of the correct datatype


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.


Solution

  • 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: