1. Not finding help here? Sign up for a free 30min tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Input Validation for only positive integers C++

  1. Oct 15, 2011 #1
    1. The problem statement, all variables and given/known data
    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 (Text):
    #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;
    }
    3. The attempt at a solution

    I am 2 months into my first programming class ever and I cant 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
     
  2. jcsd
  3. Oct 15, 2011 #2

    Mark44

    Staff: Mentor

    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.
     
  4. Oct 15, 2011 #3
    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 (Text):
     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: Oct 15, 2011
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Input Validation for only positive integers C++
Loading...