Input Validation for only positive integers C++

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
2 replies · 11K views
USN2ENG
Messages
107
Reaction score
0

Homework Statement


I created a program that will calculate the factorial of the number entered and am having a hard time getting it to not accept decimals or fractions.
Code:
#include <iostream>
using namespace std;
int main (){
	int q=0;
	int number = 0;
		
	cout<<"Please enter a positive whole number:"<<endl;
	/*cin>>number;*/
	while(!(cin>>number)||number<0){
		cin.clear();
		while(cin.get()!='\n'){ [B]/*Also, this was the only thing I could find to stop it from looping Invalid input endlessly but I am not sure exactly what this is doing, if anyone could explain that would help a lot*/[/B]
			continue;
			cin>>number;
		}
		cout<<"Invalid Input"<<endl;
		}
	int x = number;	
	int y=1;
	while(x>1){
		y = y*x;
		x--;
		}
	cout<<y;
	return 0;
}

The Attempt at a Solution



I am 2 months into my first programming class ever and I can't seem to figure out how to get around the fact that if I enter '3.2' or '3/2' it will only look at the '3' and not the '.2', or '/2'. I would probably need to change the data type to float or something but then I am not sure how to use the input validation after that. I tried using isdigit(number) but that was not working either.
I have googled just about everything I could think of but I am not sure where to go. If anyone can point me in the right direction that would help immensely! Thanks!
Chuck
 
on Phys.org
I'm not sure what your problem is. Your input variable is number, which is type int. When your program prompts you to enter a positive integer, if you type 3.2, the program will accept only the integer part, not the decimal portion. Isn't this what you want?

Also, if you type in 3/2, your haven't written your program to parse arithmetic expressions such as 3/2 or 5+ 7 and so on.
 
I wanted it to see that the decimal was there and then declare it invalid. Basically I wanted it to see if anything other than an integer is there, it is then invalid.

I was able to do it with:

Code:
 cout<<"Please enter a positive whole number:"<<endl;
	
	while((cin>>number).fail()||number<0 ||cin.peek() != '\n'){
		cin.clear();
		while(cin.get()!='\n'){
			continue;
			cin>>number;
		}
		cout<<"Invalid Input"<<endl;
		}

Thanks for all the help!
 
Last edited: