How do you give an error for someone entering a letter

  • Thread starter Thread starter odinx
  • Start date Start date
  • Tags Tags
    Error
AI Thread Summary
To handle non-numeric input in a C++ program, the user should implement error checking after each input attempt. If the input fails, the program should clear the error state with cin.clear() and discard the invalid input using cin.ignore(). The suggested approach allows the program to prompt the user again for the same input without proceeding to the next number. Additionally, using cin.ignore() helps to flush the input buffer, ensuring that any leftover characters do not affect subsequent inputs. This method ensures that the program only advances to the next prompt after valid input is received.
odinx
Messages
9
Reaction score
0
Code:
 #include <iostream>
#include <cstdlib>
#include <cmath>
using std::cout;
using std::endl;
using std::cin;

double sort(double input[], int N)
{
	double temp;
	int i, j;
	
	for (i=0; i<=8; i++)
	{
		for (j=i+1; j<=9; j++)
		{	
			if(input[i]>input[j])
			{
				temp=input[i];
				input[i]=input[j];
				input[j]=temp;
	        }
		}
	}
	return input[N];
}

int main()
{
	const int N=10;
	double x, y, sum, total, input[N];
	int i;
	sum=0;
	x=1;
   
	cout << "Enter 10 numbers: " << endl;
	for (i=0; i<=9; i++)
	{
		if (x<=10)
		{
			cout << "Number " << x << ": "; 
			cin >> input[i];
			x++;
		}
		else if (x==10)
		{
			break;
		}
	}

	sort(input, N);
	
	cout << "Here are the numbers in sorted order:" << endl;
	
	for (i=0; i<=9; i++)
	{
		cout << input[i] << " ";		
	}
	
	y=((input[N/2] + input[N/2-1])/2);
	cout <<"\nThe median is " << y << endl;
	
	for(i=0; i<=9; i++)
	{	
		sum=sum+input[i];
	}
	
	total=(sum/10);
	cout << "The mean is " << total << endl;
	
	return EXIT_SUCCESS;
}

I'm trying to give an error message when the user doesn't enter a number, but I haven't been able to get it to work.

this is what I tried:
Code:
	cout << "Enter 10 numbers: " << endl;
	for (i=0; i<=9; i++)
	{
		if (x<=10)
		{
			cout << "Number " << x << ": "; 
			cin >> input[i];
			if (!cin)
                        {
                              cin.clear();
                              cout << "Error: You Must Enter A Number. " << endl;
                              cin >> input[i];
                         }
                        x++;
                        
		}
		else if (x==10)
		{
			break;
		}
	}
I tried that out but it would repeat the error for all 10 input, instead of giving an error for that 1st one. I want to give an error for that one time they enter a letter, then have the program tell them to redo their input, then have it proceed to the next number "number 2: " So anyone have any ideas of what I should try?
 
Physics news on Phys.org
Welcome to PF, odinx! :smile:

You also need to flush the input to get rid of the letter that's there.
Adding cin.flush() will do that.
Note that you also need cin.clear() to clear the invalid state of the stream.
 
Back
Top