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;
}
0
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;
}
0
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
0
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?
0
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.
0
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);
0
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?
0
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.
0
musicmancanora4's Avatar
Go4Expert Member
im lost completely sorry .... its something simple but i dont get what your trying to say?
0
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