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; }
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: 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; }
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: month = getUserInput(prompt); tmpMonth = validateMonth(valMonth, prompt);
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?
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