如何用C++编写一个程序来接收用户输入的年份和月份,并输出该月的日历?
时间: 2024-12-06 11:26:00 浏览: 27
wannianli.rar_简易万年历
在C++中,你可以使用`<ctime>`库来获取当前日期并处理用户输入的年份和月份。以下是一个简单的示例程序,它首先接收用户的输入,然后使用`mktime()`函数将输入转换成时间结构,最后通过`strftime()`函数格式化输出日历。
```cpp
#include <iostream>
#include <ctime>
#include <iomanip>
int main() {
int year, month;
// 接收用户输入
std::cout << "请输入年份: ";
std::cin >> year;
std::cout << "请输入月份(1-12): ";
std::cin >> month;
// 检查月份是否合法
if (month < 1 || month > 12) {
std::cerr << "无效的月份!" << std::endl;
return 1;
}
// 创建一个tm结构体用于存储日期信息
struct tm date_info = {0};
date_info.tm_year = year - 1900; // 转换为自1900年以来的年份
date_info.tm_mon = month - 1; // 月份从0开始计数
date_info.tm_mday = 1; // 设置默认的第一天
// 使用mktime设置日期并获得时间戳
time_t t = mktime(&date_info);
// 如果mktime失败(如非法日期),则返回错误
if (t == -1) {
std::cerr << "无法生成日期!" << std::endl;
return 1;
}
// 格式化输出日历
std::cout << std::left << std::setw(4); // 设置每列宽度
std::cout << std::setfill(' ') << std::ios_base::right; // 右对齐填充空格
std::cout << std::setprecision(2); // 保留两位小数用于打印星期几
std::cout << std::put_time(&date_info, "%A %d") << std::endl; // 输出星期几和日期
for (int i = 1; i <= 7; ++i) {
date_info.tm_mday += i;
if (date_info.tm_mday > date_info.tm_wday + 7) { // 如果超过一周,重置星期
date_info.tm_mday -= 7;
}
std::cout << std::put_time(&date_info, "%-d"); // 输出日期,不足位数补空格
}
std::cout << "\n";
return 0;
}
阅读全文