Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check if input is numeric in C++

Tags:

c++

I want to create a program that takes in integer input from the user and then terminates when the user doesn't enter anything at all (ie, just presses enter). However, I'm having trouble validating the input (making sure that the user is inputting integers, not strings. atoi() won't work, since the integer inputs can be more than one digit.

What is the best way of validating this input? I tried something like the following, but I'm not sure how to complete it:

char input  while( cin>>input != '\n') {      //some way to check if input is a valid number      while(!inputIsNumeric)      {          cin>>input;      } } 
like image 386
chimeracoder Avatar asked Apr 13 '11 20:04

chimeracoder


2 Answers

When cin gets input it can't use, it sets failbit:

int n; cin >> n; if(!cin) // or if(cin.fail()) {     // user didn't input a number     cin.clear(); // reset failbit     cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); //skip bad input     // next, request user reinput } 

When cin's failbit is set, use cin.clear() to reset the state of the stream, then cin.ignore() to expunge the remaining input, and then request that the user re-input. The stream will misbehave so long as the failure state is set and the stream contains bad input.

like image 113
greyfade Avatar answered Sep 30 '22 01:09

greyfade


Check out std::isdigit() function.

like image 25
Christian Avatar answered Sep 29 '22 23:09

Christian