用C语言写一段代码,输入某个日期,程序输出后天的日期,如果输入日期不合法,输出-1
时间: 2024-10-25 14:13:11 浏览: 25
在C语言中,我们可以使用`<stdio.h>`库来获取用户输入,并使用`<time.h>`库处理日期。下面是一个简单的示例代码,它会接受用户的日期输入并计算后天的日期。请注意,这个代码假设用户输入的是格式"YYYY-MM-DD",并且只适用于当前年份。
```c
#include <stdio.h>
#include <time.h>
// 函数声明用于检查日期合法性
int is_valid_date(char *date);
int main() {
char date[11]; // 存储输入日期,包括前导空格
printf("请输入日期(格式: YYYY-MM-DD): ");
fgets(date, sizeof(date), stdin); // 获取用户输入
// 移除输入末尾的换行符
date[strlen(date) - 1] = '\0';
if (is_valid_date(date)) {
struct tm input_time;
sscanf(date, "%d-%d-%d", &input_time.tm_year + 1900, &input_time.tm_mon + 1, &input_time.tm_mday);
time_t raw_input = mktime(&input_time); // 将tm结构体转换为时间戳
time_t result = raw_input + ((60 * 60 * 24) * 2); // 后天的时间差
// 检查是否超出范围并更新结果
if (result > INT_MAX) {
printf("-1 (无效日期)\n");
} else {
struct tm output_time;
localtime_r(&result, &output_time); // 转换回tm并打印
printf("后天日期: %04d-%02d-%02d\n", output_time.tm_year + 1900, output_time.tm_mon + 1, output_time.tm_mday);
}
} else {
printf("-1 (无效日期)\n");
}
return 0;
}
// 判断日期是否合法
int is_valid_date(char *date) {
int len = strlen(date);
if (len != 10 || date[4] != '-' || date[7] != '-') {
return 0; // 非法日期格式
}
// 验证月份和日期是否在有效范围内
int year, month, day;
sscanf(date, "%d-%d-%d", &year, &month, &day);
if (month < 1 || month > 12 || day < 1 || day > 31) {
return 0;
}
// 如果是闰年,检查二月的天数
if (month == 2 && (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))) {
if (day > 29) {
return 0;
}
} else {
if (day > 30 || (month == 2 && day == 31)) { // 其他非闰年月份
return 0;
}
}
return 1; // 日期合法
}
```
阅读全文