1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

function passing not returning proper value

Discussion in 'C' started by musicmancanora4, Mar 17, 2006.

  1. musicmancanora4

    musicmancanora4 New Member

    Joined:
    Mar 9, 2006
    Messages:
    42
    Likes Received:
    0
    Trophy Points:
    0
    Hi guys im having a slight problem passing the month and year variable to a function that i have created called int totalDays(unsigned year, unsigned month) now when i do a print inside the function it prints 0. Even though i have inputted using a key for example 6 for the month and 2006 for the year.


    So pretty much after i have entered the input for month and year it does not carry the value that i have entered into the totalDays function instead its always 0 why is that?




    Code:
    int main(void)
    {
       unsigned  month;
       unsigned  year;
       int i;
       int daysOfMonth[] = {31,28,31,30,31,30,31,31,30,31,30,31};
       
       
       month = getMonth();
       year  = getYear();
      
       displayCalendar(month, year);
       
       /* function call : if its a leap year february is now 29 days instead of 28*/
       if(isLeapYear(year))
       {
          
          daysOfMonth[1] = 29;  /* change feb to 29 days*/
       }
        
       return EXIT_SUCCESS;
    }
    
    
    /****************************************************************************
    * Function getMonth() prompt the user for a number MIN_MONTH to MAX_MONTH and
    * returns that number. The number 0 is valid because this indicates that the
    * user wants to select all months.
    ****************************************************************************/
    unsigned getMonth()
    {
       
       /*** declare variables*/
      
      
      char *prompt = "Please enter a month between 0 - 12 !\n";
      char *month;
      int valMonth;
      int monthValid;
      
      do
      {
      monthValid = TRUE;
      month = getUserInput(prompt);
      
      valMonth = strtod(month,NULL);
      monthValid = validateMonth(valMonth);
      }
      while(!monthValid);
      /*printf("hello %s",month);*/
      /*printf("Please enter a month between 0 - 12\n");*/
    
     
      /* validation check if month entered is less then 0 > 12*/ 
     
      
      /*doint arr[] = {1,2,3};
      {
            fgets(buff, BUFF_SIZE, stdin);
    	
            
    	*month = atoi(buff); 
           
    	while(flag == 1 || *month <0 || *month >12)
    	{
    	   flag = 0;
    	   
    	   printf("Wrong input for month from 0 - 12 only!\n");
    	   printf("Please enter a month between 0 - 12\n");
    	   
    	   fgets(buff, BUFF_SIZE, stdin);
    	   *month = atoi(buff); month = getUserInput(prompt, result);
      tmpMonth = validateMonth(valMonth, prompt, result);
    	
    	}
       
    	month
           
    	
    	                    
    	
           
       }
       while(flag != 0 );
              */
            
       
       return EXIT_SUCCESS;
    
    }
    
    
    /****************************************************************************
    * Function getYear() prompts the user for a number MIN_YEAR to MAX_YEAR and
    * returns that number.
    ****************************************************************************/
    unsigned getYear(char *month)
    {
       char *prompt = "Please enter the year\n";
       char *year;
       int valYear;
       int yearValid;
       
       do
       {
         year = getUserInput(prompt);
         valYear = strtod(year,NULL);
         yearValid = validateYear(valYear);
         
       }
       while(!yearValid);
       
       return EXIT_SUCCESS;
    }
    
    
    /****************************************************************************
    * Function displayCalendar() displays the calendar for the user.
    * The function will display the calendar for a whole month.
    * If the user supplied a month of "0", then a calendar for a whole year
    * is displayed instead each month displayed under the previous one (you
    * don't need to try to display months side by side).
    * Give attention to getting the output format exactly as shown below
    * (including headings and alignment). Here's an example for March 2006:
    * --------------------
    *      March 2006
    *  S  M Tu  W Th  F  S
    *           1  2  3  4
    *  5  6  7  8  9 10 11
    * 12 13 14 15 16 17 18
    * 19 20 21 22 23 24 25
    * 26 27 28 29 30 31
    * 
    ****************************************************************************/
    void displayCalendar(unsigned month, unsigned year)
    {
       /* function called totalDays();*/
       /* total days % 7 finds out how many spaces for each month*/
       /* figure out when to print a new line*/
       int calDays;
       
       calDays = totalDays(month, year);
       
    }
    
    
    /****************************************************************************
    * Function readRestOfLine() is used for buffer clearing. Source: 
    * https://inside.cs.rmit.edu.au/~sdb/teaching/C-Prog/CourseDocuments/
    * FrequentlyAskedQuestions/
    ****************************************************************************/
    void readRestOfLine()
    {
       int c;
    
       /* Read until the end of the line or end-of-file. */   
       while ((c = fgetc(stdin)) != '\n' && c != EOF);
    
       /* Clear the error and end-of-file flags. */
       clearerr(stdin);
    }
    
    char* getUserInput(char *prompt)
    {
       char *result;
       char buff[BUFF_SIZE];
       
       printf(prompt);
       
       result = fgets(buff, BUFF_SIZE, stdin);
       
       
        if(result == NULL)
        {
           
            printf("Error please enter the input again!\n");
       
        }
        else if(result[strlen(result)-1] != '\n')
        {
            readRestOfLine();
        }
        
      
        return result;
       
       
    }
    
    int validateMonth(unsigned  month)
    {
       
         if(month<0 || month>12) /* flag 1 for true*/
         {
    	
            printf("Month error 0 or less or equal to 12 please\n");
    	return FALSE;
         }
         
         return TRUE;
         
         /*return 1;*/
    }
    
    int validateYear(unsigned year)
    {
       
       if(year<0 || year>3000)
       {
          printf("between 0 - 3000 only!!\n");
          return FALSE;
       }
       
       return TRUE;
    }
    
    int isLeapYear(unsigned year)
    {
       if((year%400 == 0)|| ( year%4==0 && year % 100 != 0))
       {
          
          return TRUE; 
       }
       else
       {
          return FALSE;
       }
      
    }
    
    int totalDays(unsigned year, unsigned month)
    {
    
        printf("year is:%d  month is:%d", year, month); 
    
    /******* in here it should print what i have inputted in the month and year but it always gives me 0? why is that?*******/
       
       return EXIT_SUCCESS;
    }
    
    
    
    
     
  2. shabbir

    shabbir Administrator Staff Member

    Joined:
    Jul 12, 2004
    Messages:
    15,287
    Likes Received:
    364
    Trophy Points:
    83
    Re: do while prob on validation

    I have moved this into a new thread.
     
  3. coderzone

    coderzone Super Moderator

    Joined:
    Jul 25, 2004
    Messages:
    734
    Likes Received:
    37
    Trophy Points:
    0
    Because you are returning the EXIT_SUCCESS and assigning that into the month variable and then printing it.
     

Share This Page