运行此程序的2功能时打印出的月份历每行只有一个,如何修改程序使运行2功能时每行打印三个月份?
#include <stdio.h>
#include <time.h>
void print_weekday(int day_of_week);
void calculateFutureDate() {
char input_date[11];
printf("请输入日期(格式:dd/mm/yyyy): ");
scanf("%s", input_date);
int day = (input_date[0] - '0') * 10 + (input_date[1] - '0');
int month = (input_date[3] - '0') * 10 + (input_date[4] - '0');
int year = (input_date[6] - '0') * 1000 + (input_date[7] - '0') * 100 +
(input_date[8] - '0') * 10 + (input_date[9] - '0');
struct tm date_input = { .tm_mday = day, .tm_mon = month - 1, .tm_year = year - 1900 };
time_t timestamp_input = mktime(&date_input);
time_t timestamp_now = time(NULL);
double seconds_diff = difftime(timestamp_now, timestamp_input);
int days_diff = (int)(seconds_diff / (60 * 60 * 24));
struct tm now = *localtime(×tamp_now);
int weekday_now = now.tm_wday;
printf("从 %s 到今天共有 %d 天。\n", input_date, days_diff);
print_weekday(weekday_now);
}
int isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int daysInMonth(int month, int year) {
switch (month) {
case 2: return isLeapYear(year) ? 29 : 28;
case 4: case 6: case 9: case 11: return 30;
default: return 31;
}
}
void printMonth(int year, int month) {
int days = daysInMonth(month, year);
int startDay = 1;
printf("%d-%02d ", year, month);
printf("Sun Mon Tue Wed Thu Fri Sat\n");
for (int i = 0; i < startDay; i++) {
printf(" ");
}
for (int day = 1; day <= days; day++) {
printf("%3d", day);
if ((startDay + day - 1) % 7 == 0) {
printf("\n");
}
}
}
void printMenu();
void calculateFutureDate();
void printYearCalendar(int year);
void printMonthCalendar(int year, int month);
int main() {
int choice;
do {
printf("\n==== 日历问题 ====\n");
printf("1. 计算未来天数和星期\n");
printf("2. 打印年历\n");
printf("3. 打印月历\n");
printf("请输入您的选择(1-3),或者输入其他数字退出程序:");
scanf("%d", &choice);
switch (choice) {
case 1:
calculateFutureDate();
break;
case 2: {
int year;
printf("请输入年份:");
scanf("%d", &year);
printYearCalendar(year);
break;
}
case 3: {
int year, month;
printf("请输入年份和月份:");
scanf("%d %d", &year, &month);
printMonth(year, month);
break;
}
default:
printf("谢谢使用,再见!\n");
return 0;
}
} while (1);
return 0;
}
void print_weekday(int day_of_week) {
switch (day_of_week) {
case 0:
printf(" 是星期日。\n");
break;
case 1:
printf(" 是星期一。\n");
break;
case 2:
printf(" 是星期二。\n");
break;
case 3:
printf(" 是星期三。\n");
break;
case 4:
printf(" 是星期四。\n");
break;
case 5:
printf(" 是星期五。\n");
break;
case 6:
printf(" 是星期六。\n");
break;
default:
printf(" 错误的星期数值。\n");
break;
}
}
void printYearCalendar(int year) {
for (int month = 1; month <= 12; month++) {
printMonth(year, month);
printf("\n");
}
}
