#include <stdio.h>
#include <time.h>
int days_in_month(int year, int month) {
struct tm t = {0};
t.tm_year = year - 1900;
t.tm_mon = month; // go to next month
t.tm_mday = 0; // day 0 of next month = last day of current month
mktime(&t);
return t.tm_mday;
}
int weekday_of_first(int year, int month) {
struct tm t = {0};
t.tm_year = year - 1900;
t.tm_mon = month - 1;
t.tm_mday = 1;
mktime(&t);
return t.tm_wday; // 0 = Sunday
}
void print_month_calendar(int year, int month) {
int first_wday = weekday_of_first(year, month);
int dim = days_in_month(year, month);
printf(" %d-%02d\n", year, month);
printf("Su Mo Tu We Th Fr Sa\n");
for (int i = 0; i < first_wday; i++)
printf(" ");
for (int day = 1; day <= dim; day++) {
printf("%2d ", day);
if ((first_wday + day) % 7 == 0)
printf("\n");
}
printf("\n");
}
int main(void) {
print_month_calendar(2026, 1);
return 0;
}
/*
run:
2026-01
Su Mo Tu We Th Fr Sa
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
*/