do while prob on validation

Go4Expert Member
15Mar2006,09:39   #1
musicmancanora4's Avatar
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;
}
Team Leader
15Mar2006,11:01   #2
coderzone's Avatar
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;
}
Go4Expert Member
15Mar2006,11:04   #3
musicmancanora4's Avatar
iv got the while loops so that if it is an error i want it to re get the user input
Go4Expert Member
15Mar2006,11:10   #4
musicmancanora4's Avatar
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?
Team Leader
15Mar2006,11:56   #5
coderzone's Avatar
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.
Team Leader
15Mar2006,11:59   #6
coderzone's Avatar
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);
Go4Expert Member
15Mar2006,12:05   #7
musicmancanora4's Avatar
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?
Team Leader
15Mar2006,15:59   #8
coderzone's Avatar
No what I meant is you are inputing the value 5 in one variable and testing it in other.
Go4Expert Member
15Mar2006,17:33   #9
musicmancanora4's Avatar
im lost completely sorry .... its something simple but i dont get what your trying to say?
Go4Expert Founder
15Mar2006,21:43   #10
shabbir's Avatar
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