Hi all,
I am a beginner to C++ and am having problems with data validation in a project. The program is a oylmpic diving score program and is working ok only for when I input an invalid character the for loop seems to continusal run. Is there an easy for me to fix this so that I can just output to the user "Invalid character"??

Please see below section of code...

//User input
                cout<<"\nPlease enter first judges score : \n\n";
                            //While loop for data validation
                            while (judge1<0 || judge1>6)
                               cout<<"Invalid score, must be in the range 0.0 to 6.0\n\n";
                               cout<<"Please reenter\n";
7 Years
Discussion Span
Last Post by chukka32

My usual advice is to read all user input as a string; if you want a numeric input, convert the string. Otherwise there is some cleanup of cin that you can do. There must be countless examples of this that can by found by searching this forum.


Use this :

#include <iostream>
#include <string>
using namespace std;

int getInt(const string& messageBeforeInput){
   cout << messageBeforeInput;
   int result = 0;
   while(! (cin >> result) ){ //check for bad input
      cout  << messageBeforeInput ;
      cin.clear();  //clear the stream bits
      while(cin.get() != '\n') continue; //get rid of the junk
  return result;
bool failsRange(const int value, const int min, const int max){
	 return value < min || value > max;
int main()
   int value = -1;

    while( failsRange(value,0,100) )
          value = getInt("Please enter a number :" );

	cout << value << endl;

  return 0;

I agree with Dave, depending on what you've learned so far, accept all input as a string and use atoi and atof string functions to convert them (So your prog wont freak out if letters are entered into an int or double variable)


Thanks a million for all your help, I think I'll try read them as string and then converting, seems like the simplest option!

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.