do while prob on validation

musicmancanora4's Avatar
Go4Expert Member
Hey guys my while condition isnt working working properly in validateMonth what happens it just stays in there. If i type in 5 or any number between 0-12 it will still say its the wrong input. Why isnt it testing the condition properly?



Code:
unsigned getMonth()
{
   
   /*** declare variables*/
  
  unsigned  tmpMonth;
  int  valid = 0;
  char *prompt = "Please enter a month between 0 - 12 !\n";
  char *month;
  unsigned valMonth;
  

  
  month = getUserInput(prompt);
  tmpMonth = validateMonth(valMonth, prompt);
  

   
   return EXIT_SUCCESS;

}


Code:
unsigned validateMonth(unsigned month, char *prompt)
{
     unsigned m;
     int flag = FALSE; /* false value*/
   do
   {
     while(flag == TRUE || month<0 || month>12) /* flag 1 for true*/
     {
	flag = FALSE;
        printf("Month error 0 or less or equal to 12 please\n");
	getUserInput(prompt);
        
     }
   }while(flag !=FALSE);
     
     return m;
}
coderzone's Avatar, Join Date: Jul 2004
Team Leader
I have lots of queries for your validateMonth function.

1. Why do you need do while and while loops at all.
2. Its always an infinite loop because you have FLAG = FALSE as initial values and then you have an OR condition.
3. You have never assigned FLAG as true but then also testing that almost in 2 while and do while loops.
4. You are returning m which is not used in the function and so the return value is always a garbage.

Cant it be done as
Code: C
unsigned validateMonth(unsigned month, char *prompt)
{
    unsigned m =0;
    if(month<0 || month>12) /* flag 1 for true*/
    {
        printf("Month error 0 or less or equal to 12 please\n");
        getUserInput(prompt);
        m = 1;
    }
    return m;
}
musicmancanora4's Avatar
Go4Expert Member
iv got the while loops so that if it is an error i want it to re get the user input
musicmancanora4's Avatar
Go4Expert Member
iv used that and it still dosnt test the condition properly .... i enter for example 5 which is between
0-12 and it still falls inside the if and says "month error 0 or less then equal to 12" then i type it a second type and it works.. why is that?
coderzone's Avatar, Join Date: Jul 2004
Team Leader
Quote:
Originally Posted by musicmancanora4
iv got the while loops so that if it is an error i want it to re get the user input
Then also you dont need nested ones and also you are not using the new input of user each time.
coderzone's Avatar, Join Date: Jul 2004
Team Leader
Quote:
Originally Posted by musicmancanora4
iv used that and it still dosnt test the condition properly .... i enter for example 5 which is between
0-12 and it still falls inside the if and says "month error 0 or less then equal to 12" then i type it a second type and it works.. why is that?
Thats because the month you are inputing is in different variable than that passed to the validate month variable.
Code: C
month = getUserInput(prompt);
tmpMonth = validateMonth(valMonth, prompt);
musicmancanora4's Avatar
Go4Expert Member
Should i be testing for the result variable instead inside the validation function rather then the "month" variable?

Is that what u mean by the different variable?
coderzone's Avatar, Join Date: Jul 2004
Team Leader
No what I meant is you are inputing the value 5 in one variable and testing it in other.
musicmancanora4's Avatar
Go4Expert Member
im lost completely sorry .... its something simple but i dont get what your trying to say?
shabbir's Avatar, Join Date: Jul 2004
Go4Expert Founder
What he is trying to say is
You are taking the input from the user in the variable month which is a local variable in getMonth function.
month = getUserInput(prompt);
Then you are calling the validate month function with valMonth another variable which is never initialized as
tmpMonth = validateMonth(valMonth, prompt);
Then valMonth is always has a grabage value.

How do you expect it to validate the input taken from the getUserInput function.

Thanks
Shabbir