用C语言编写程序实现当用户输入年份后,屏幕上输出该年1月的日历,按回车输出下月的日历。直到输出12月的日历结束。
时间: 2024-12-11 10:22:28 浏览: 3
在C语言中,你可以使用`ctime`库和`stdio.h`库来实现这个功能。这里是一个简单的示例,它会接收用户的输入作为年份,并循环输出每个月的日历:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void print_month(int year, int month) {
struct tm calendar[1];
calendar[0].tm_year = year - 1900; // 时间表示需要减去1900,因为ctime以1900为基点
calendar[0].tm_mon = month - 1; // January is 0, so subtract 1 for the C library's zero-based months
calendar[0].tm_mday = 1;
calendar[0].tm_wday = 0; // No need to calculate weekday here
time_t t = mktime(calendar);
char date[80];
strftime(date, sizeof(date), "%A %d %B", &calendar[0]);
printf("Calendar for %s:\n", date);
for (int i = 1; i <= 31; ++i) {
if (i == 1 || i == 7) { // Print a line separator
printf("-----------------------------\n");
} else {
printf("%d ", i);
}
if ((i + calendar[0].tm_mday - 1) % 7 == 0) { // Check end of week
printf("\n");
}
}
printf("\n\n");
}
int main() {
int year, month;
while (true) {
printf("Enter a year and press Enter (or type 'quit' to exit): ");
scanf("%d", &year);
if (strcmp("quit", year) == 0) break; // Exit on 'quit' input
if (year < 1) {
printf("Invalid year. Please try again.\n");
continue;
}
// Loop through all 12 months
for (month = 1; month <= 12; ++month) {
print_month(year, month);
}
}
return 0;
}
```
在这个程序中,`strftime`函数用于格式化日期,`mktime`函数将结构体时间转换为Unix时间戳。用户可以输入年份,然后程序会输出对应月份的日历。如果用户输入"quit",则退出循环。
阅读全文