【发布时间】:2019-05-04 05:23:38
【问题描述】:
我正在尝试将用户输入日期添加到现有时间结构,但我收到一个我不理解的错误。当我尝试修改月份日期时,编译器告诉我工作日超出范围。代码贴在下面。
struct tm date;
int m, d, y, n;
char buffer[80];
printf("Enter a date in mm/dd/yyyy format.\n");
scanf("%d/%d/%d", &m, &d, &y);
date.tm_mday = d;
date.tm_mon = m;
date.tm_year = y - 1900;
mktime(&date);
printf("How many days would you like to advance this time?");
scanf("%d", &n);
date.tm_mday += n;
mktime(&date);
strftime(buffer, sizeof(buffer), "%c", &date);
printf("Your new date is %c", buffer);
【问题讨论】:
-
你知道月份范围是 0 到 11 对吗?鉴于 12 月是第 12 个月..
-
struct tm date;中的哪些字段 also 您声明您从未费心设置为 any 确定值?有些被mktime忽略;有些不是。您是否希望mktime以某种方式猜测这些值不是您在通话之前未设置的? -
开始工作前将
struct tm的所有元素初始化为0:struct tm date = { 0 };。目前,您正在为结构的时间组件使用不确定的值。您还应该检查scanf()调用是否有效 — 返回了正确数量的值(分别为 3 和 1)。您可以测试对mktime()的调用;您可以在每次调用mktime()后打印date值。你确定是编译器在抱怨吗?