Pradana - 1 year ago 56

C++ Question

I currently have this function:

`double GrabNumber() {`

double x;

cin >> x;

while (cin.fail()) {

cin.clear();

cin.ignore(numeric_limits<streamsize>::max(), '\n');

cout << "You can only type numbers!\nEnter the number: ";

cin >> x;

}

return x;

}

Its purpose is to check if

`x`

`cin >> x`

It's called during this function:

`void addition() {`

cout << "\nEnter the first number: ";

double a = GrabNumber();

cout << "Enter the second number: ";

double b = GrabNumber();

// rest of code

When I type for example "6+" when it tells me to enter the first number, it accepts it but immediately goes to the second line and calls it an error where I haven't even entered my input.

I assume this is because the first input only accepts "6" while "+" goes to the second input returning an error. Therefore, there must be an issue with the parameters of

`while`

Answer Source

If your input is immediately successful, you don't ignore the rest of the line, which ends up into the next input. This can be fixed by simply duplicating the `cin.ignore`

call.

```
double GrabNumber() {
double x;
cin >> x;
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // <--
while (cin.fail()) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "You can only type numbers!\nEnter the number: ";
cin >> x;
}
return x;
}
```

I'll leave DRYing this code as an exercise ;)