我做了一个程序,计算两个日期之间的不同日期,但是我不确定如何添加一条确保程序不包括结束日期的语句。
然后,如果我在写完两个日期之后写了include一词,那么只会包含结束日期!例如,程序将说以下./daysCalulcatorA dd1 mm2 yyyy1 dd2 mm2 yyyy2,结束日期(dd2 mm2 yyyy2将不包括在内,直到我这样写“ incude”一词: ./daysCalulcatorA dd1 mm2 yyyy1 dd2 mm2 yyyy2 incude
例如:
/daysCalulcatorA 19 2 2019 22 4 2019 include
我该怎么做?
答案 0 :(得分:1)
您可以使用<string.h>
中的strcmp来检查argv [7]是否为“ include”,并设置一个变量以忽略结束日期
/* Rest of the code above */
if (mm2<mm1) {
mm2 += 12;
yyyy2 -= 1;
}
int include = 0;
if (argc >= 8)
{
if (strcmp("include", argv[7]) == 0)
{
include = 1;
}
}
day_diff = dd2 - dd1;
if (include == 0)
{
day_diff--;
}
printf("%d", day_diff);
return 0;
但是我建议您搜索getopts
,标志似乎对用户更友好
./daysCalculatorA -i 19 2 2019 22 4 2019
答案 1 :(得分:0)
我的代码计算的是月和日,但仅计算打印日,即86天或2个月零25天!我该如何编辑使其显示86?
这是“不要(尝试)重新发明轮子”的典型情况。使用标准C mktime
函数可将细分时间转换为可以相互减去的时间值。
#include <time.h>
…
time_t t1, t2;
t1 = mktime(&(struct tm){ .tm_mday=dd1, .tm_mon=mm1-1, .tm_year=yyyy1-1900 });
t2 = mktime(&(struct tm){ .tm_mday=dd2, .tm_mon=mm2-1, .tm_year=yyyy2-1900 });
day_diff = (t2 - t1) / 24 / 60 / 60 + include; // make days from seconds