This is the code I have so far:
Code:
#include <stdio.h>
char *months[] =
{
" ",
"\nJanuary",
"\nFebruary",
"\nMarch",
"\nApril",
"\nMay",
"\nJune",
"\nJuly",
"\nAugust",
"\nSeptember",
"\nOctober",
"\nNovember",
"\nDecember"
};
int month_days[] = {0, 31, 28, 31, 30, 31, 30, 31 ,31 ,30, 31, 30, 31};
int first_day_year(int year)
{
int first_day;
int x;
int y;
int z;
first_day = (year + x - y + z) %7;
return first_day;
}
int leapyear(int year)
{
if(year%4 == 0 && year%100 != 0 || year%400 == 0)
{
month_days[2] = 29;
return 1;
} else {
month_days[2] = 28;
return 0;
}
}
int calendar(int month, int year, int first_day)
{
int i;
printf("%s %d\n\n", months[month], year);
printf("Sun Mon Tue Wed Thu Fri Sat\n");
for(i = 0; i < month; i++)
{
first_day = (first_day + month_days[month]) % 7;
}
for(i = 1; i <= 1 + first_day * 5; i++)
{
printf(" ");
}
for(i = 1; i <= month_days[month]; i++)
{
printf("%2d", i);
if((i + first_day)%7 > 0)
printf(" ");
else
printf("\n ");
}
}
int main(void)
{
int year;
int month;
int first_day;
do{
printf("Enter a month (1 - 12): ");
scanf("%d", &month);
} while (month < 1 || month > 12);
do{
printf("Enter a year (1978 - 3000): ");
scanf("%d", &year);
} while (year < 1978 || year > 3000);
first_day = first_day_year(year);
leapyear(year);
calendar(month, year, first_day);
printf("\n");
return 0;
}
The program basically asks for a month and year and then displays the calendar for the input.
I'm able to compile this code and it works fine for March 2012, but apparently, in other months, the day starts a day before it originally should.
For example, January 1978 starts on a Sunday, but when I run my program, it starts on a Saturday.
How can I fix this?
Please help!