用c语言编写程序:按照 **** ** **(年 月 日,比如2023 4 25)格式输入一个具体的年月日期,通过程序计算: 该日期是这一年度的第几天。 如果输入格式非法或日期本身无效,则输出“输入日期有误!”的提示。
时间: 2024-06-25 07:00:32 浏览: 82
在C语言中,你可以使用`strtol`函数解析输入的字符串,并结合`mktime`和`gmtime`函数来计算给定日期是一年中的第几天。以下是一个简单的实现示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
char input[20];
int year, month, day, day_of_year = 0;
char *endptr;
printf("请输入日期 (格式: 年 月 日): ");
fgets(input, sizeof(input), stdin); // 读取用户输入,包括空格
// 移除末尾的换行符
input[strcspn(input, "\n")] = '\0';
// 解析年、月、日
if (sscanf(input, "%d %d %d", &year, &month, &day) == 3 && // 检查是否正确格式
month > 0 && month <= 12 && day > 0 && day <= 31) { // 检查日期的有效性
// 将输入格式转换为时间戳(自1970年1月1日以来的天数)
struct tm tm = {0};
tm.tm_year = year - 1900; // 转换为自从1970以来的年份
tm.tm_mon = month - 1; // 月份从0开始计数
tm.tm_mday = day;
tm.tm_hour = 0;
tm.tm_min = 0;
tm.tm_sec = 0;
tm.tm_isdst = -1; // 如果不确定是夏令时还是标准时间,使用此值
// 计算这一天是一年中的第几天
time_t t = mktime(&tm);
if (t != (time_t)-1) {
day_of_year = tm.tm_yday; // tm_yday包含的是当前年份的第几天
} else {
printf("输入日期有误!\n");
}
} else {
printf("输入日期有误!\n");
}
printf("该日期是一年中的第 %d 天。\n", day_of_year);
return 0;
}
```
阅读全文