How to check if the input is a valid integer without any other chars?
c++, integer, validation
Solution
You could read a string, extract an integer from it and then make sure there's nothing left:
std::string line;
std::cin >> line;
std::istringstream s(line);
int x;
if (!(s >> x)) {
// Error, not a number
}
char c;
if (s >> c) {
// Error, there was something past the number
}
Problem
``` #include <iostream> #include <limits> using namespace std; int main() { int x; cout << "5 + 4 = "; while(!(cin >> x)){ cout << "Error, please try again." << endl; cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); } if (x == (5 + 4)){ cout << "Correct!" << endl; } else{ cout << "Wrong!" << endl; } return 0; } ``` How can I check if the user inputs a valid integer? In this program I wrote above, if the user inputs `9`, it should be correct, however, if the user inputs `9a` for example, it should return an error, but it doesn't for some reason. How can I correct it? How I did it using cin.peek() ``` #include <iostream> #include <limits> #include <stdio.h> using namespace std; int main() { int x; bool ok; cout << "5 + 4 = "; cin >> x; while(!ok){ cin >> x; if(!cin.fail() && (cin.peek() == EOF || cin.peek() == '\n')){ ok = true; } else{ cout << "Error, please try again." << endl; cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); } } if (x == (5 + 4)){ cout << "Correct!" << endl; } else{ cout << "Wrong!" << endl; } return 0; } ```