trouble with calendar days and printing

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

  1. musicmancanora4

    musicmancanora4 New Member

    Joined:
    Mar 9, 2006
    Messages:
    42
    Likes Received:
    0
    Trophy Points:
    0
    Hey guys sorry for posting the whole code again..
    How i can get my calenda program working from here? Because its not printing anything its only printing the mon tu wed etc but not the days of the month 1 - 31 and im not sure if its worked out correctly where the month starts?

    Someone plz help me?



    Code:
     
       int main(void)
    {
       unsigned  month;
       unsigned  year;
       unsigned long days = 0;
       int i;
       int *keeptrack;
       int daysOfMonth[MAX_MONTH] ={31,28,31,30,31,30,31,31,30,31,30,31};
       
       /* that prints array
       for(i=0; i<MAX_MONTH; i++)
       {
       printf("days array:%d\n", daysOfMonth[MAX_MONTH]);
       }*/
       
       month = getMonth();
       year  = getYear();
      
      
       if(isLeapYear(year))
       {
          
          daysOfMonth[1] = 29;  /* change feb to 29 days*/
          
       }
       
       displayCalendar(month, year, daysOfMonth, keeptrack);
       
       return EXIT_SUCCESS;
    }
    
    
    /***********************************track,*****************************************
    * 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)void ;*/
      /*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");
    	   
    	   MAX_MONTHfgets(buff, BUFF_SIZE, stdin);
    	   *month = atoi(buff); month = getUserInput(prompt, result);
      tmpMonth = validateMonth(vvoid alMonth, prompt, result);
    	
    	}
       
    	month
           
    	
    	   MAX_MONTH                 
    	
           
       }
       while(flag != 0 );
              */
      /* printf(" value of month is:%d", valMonth) ;    */
       
       return valMonth;
    
    }
    
    
    /****************************************************************************
    * Function MAX_MONTHgetYear() 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 valYear;
    }
    
    
    /****************************************************************************
    * 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 avoid lignment). 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, int ar[], int *track)
    {
       /* function called totalDays();*/
       /* total days % 7 finds out how many spaces for each month*/
       /* figure out when to prvoid int a new line*/
       
       int i;
       int dt;
       int loop;
       int t;
       t=*track;
       
       totalDays(month, year, ar, t);
       
       printf("\n\n\n\n\t\t");
       printf("S  M  Tu W  Th  F  S\n");
       printf("%d", t);
      for(loop=0; loop<t+2; loop++)
      {
          printf("\t");
          for(dt=1; dt<=month; dt++)
      {
          
         
          if(t%7==0 && t!=0)
          {
             printf("\n\n\t\t");
    	 printf("%d\t", dt);
    	 t++;
          }
      
      }
      
      
      }
       
       
       
       
       
    }
    
    
    /****************************************************************************
    * Function readRestOfLine() is used for buffer clearing. Source: 
    * https://inside.cs.rmit.edu.atrack,u/~sdb/teaching/C-Prog/CourseDocuments/
    * FrequentlyAskedQuestions/
    ***************************void *************************************************/
    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)
    {
       /* year = 2006; test for leap year*/
       if((year%400 == 0)|| ( year%4==0 && year % 100 != 0))
       {
          printf("leap year\n");
          return TRUE; 
       }
       else
       {
          return FALSE;
       }
      /* return year;*/
    }
    
    void totalDays(unsigned month, unsigned year, int ar[], int track)
    {
       int i;
       int md = 0;
       int leap=0;
       int startYear = 1900;
       
       unsigned d;
       unsigned yrd;  
       
       for(i=startYear; i<year; i++)
       {
          if((i%4==0)&&((i%100!=0)||(i%400==0)))
          {
             leap++;
          }
       
       }
       
       for(i=0; i<(month-1)&&(i<11); i++)
       {
          md = md+ar[i];
          yrd=(year-startYear)*365;
          d = yrd+leap+md;
          track=d%7;
       }
       
      /*printf("Month day:%d.yearDay1900:%d... 
       day:%d..track%d", md, yrd,d,track);*/
    
    
    }
    
    
    
    
    
    
     
  2. coderzone

    coderzone Super Moderator

    Joined:
    Jul 25, 2004
    Messages:
    736
    Likes Received:
    39
    Trophy Points:
    28
    The problem is your strtod function return 0 and so all the values are being lost. Use atoi instead of that as that can help you towards success.
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice