tags:

views:

2075

answers:

4

I'd like to know how to limit an input value to signed decimals using cin. (C++)

+10  A: 

If the backing variable of the cin is a number, and the string provided is not a number, the return value is false, so you need a loop:

int someVal;

while(!(cin >> someVal)) {
   cin.reset();
   cout << "Invalid value, try again.";
}
arul
A: 

Something like:

double a;
cin >> a;

Should read your signed "decimal" fine.

You'll need a loop and some code to make sure it handles invalid input in a sensible way.

Good luck!

Marcos Lara
+1  A: 
double i;

//Reading the value
cin >> i;

//Numeric input validation
if(!cin.eof())
{
    peeked = cin.peek();
    if(peeked == 10 && cin.good())
    {
             //Good!
             count << "i is a decimal";
        }
        else
        {
             count << "i is not a decimal";
         cin.clear();
         cin >> discard;
        }
}

This also gives an error message with the input -1a2.0 avoiding the assignation of just -1 to i.

Raúl Roa
+1  A: 

cin's >> operator works by reading one character at a time until it hits whitespace. That will slurp the whole string -1a2.0, which is obviously not a number so the operation fails. It looks like you actually have three fields there, -1, a, and 2.0. If you separate the data by whitespace, cin will be able to read each one without problem. Just remember to read a char for the second field.

Kristo