Comp Sci Input Validation for only positive integers C++

Click For Summary
The discussion centers on implementing input validation in a C++ program to ensure only positive integers are accepted for calculating factorials. The user struggles with inputs like decimals or fractions, which the current code does not adequately reject. A solution is proposed that involves checking for input failures and ensuring no extra characters remain in the input buffer after reading the integer. The code modification suggested includes using `cin.peek()` to verify that the next character is a newline, indicating valid input. Overall, the conversation highlights the importance of robust input validation in programming.
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 alot*/[/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
 
Physics news 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:

Similar threads

  • · Replies 3 ·
Replies
3
Views
1K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 7 ·
Replies
7
Views
2K
  • · Replies 24 ·
Replies
24
Views
2K
  • · Replies 8 ·
Replies
8
Views
1K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 6 ·
Replies
6
Views
3K