编写一个程序,提示用户输入两个日期,然后显示哪一个日期更早
时间: 2024-10-06 14:03:24 浏览: 45
在C语言中,我们可以使用`getdate`和`strptime`函数从用户输入的字符串解析出日期,然后再利用`difftime`函数来比较两个日期。由于`getdate`和`strptime`在一些老旧的系统上可能不可用,这里我们可以使用`<ctime>`和`<string>`这两个头文件,以及`std::istringstream`来帮助解析日期。以下是一个简单的示例:
```c++
#include <iostream>
#include <sstream>
#include <ctime>
bool is_date_valid(const std::string& date_str) {
struct tm timeinfo;
return strptime(date_str.c_str(), "%Y-%m-%d", &timeinfo) != nullptr;
}
int main() {
std::string input1, input2;
std::cout << "请输入第一个日期(格式:YYYY-MM-DD): ";
std::getline(std::cin, input1);
while (!is_date_valid(input1)) {
std::cerr << "无效的日期格式,请重新输入: ";
std::getline(std::cin, input1);
}
std::cout << "请输入第二个日期(格式:YYYY-MM-DD): ";
std::getline(std::cin, input2);
while (!is_date_valid(input2)) {
std::cerr << "无效的日期格式,请重新输入: ";
std::getline(std::cin, input2);
}
std::tm t1 = {};
std::istringstream iss1(input1);
if (!(iss1 >> std::get_time(&t1, "%Y-%m-%d"))) {
std::cerr << "无法解析第一个日期" << std::endl;
return 1;
}
std::tm t2 = {};
std::istringstream iss2(input2);
if (!(iss2 >> std::get_time(&t2, "%Y-%m-%d"))) {
std::cerr << "无法解析第二个日期" << std::endl;
return 1;
}
if (difftime(mktime(&t1), mktime(&t2)) < 0) {
std::cout << "第一个日期(" << input1 << ")较早。\n";
} else {
std::cout << "第二个日期(" << input2 << ")较早。\n";
}
return 0;
}
```
在这个程序中,我们首先检查用户的输入是否符合日期格式,然后将输入转换为`struct tm`以便比较。
阅读全文