【问题标题】:Get Time Difference without if else statement在没有 if else 语句的情况下获取时差
【发布时间】:2018-07-31 12:58:22
【问题描述】:

C Time Difference

scanf ("%2d %2d", &shours, &sminutes); 
printf ("Enter End Time  : ");
scanf ("%2d %2d", &ehours, &eminutes);
printf ("\nTIME DIFFERENCE\n");
tohours = ehours - shours;
printf("Hour(s)  : %2d", tohours);
tominute = eminutes - sminutes;
printf("\nMinute(s): %2d ", tominute);

我怎样才能使我的输出像这样?当我尝试运行我的代码时,分钟输出是 -59 而不是 1,而我的小时数是得到输出“1”的人

附:不使用 if else 语句

【问题讨论】:

  • 您使用的输入是什么?你期望输出是什么?
  • 小时和分钟是痛苦的处理。将您的时间转换为合理的格式(例如,从纪元开始的秒数),以该合理的格式进行计算,然后转换回来。
  • 如果归一化为time_t(自epoch以来的秒数),则有difftime()。

标签: c time


【解决方案1】:

使用(某种)时间戳,将小时和分钟变量合二为一,例如:

stime = shours * 60 + sminutes;
etime = ehours * 60 + eminutes;

然后计算它的差

totime = etime - stime;

然后将其转换回小时和分钟

tominutes = totime % 60;
tohours = (totime - tominutes) / 60;

(整数除法将负责向下舍入)

不是最详尽的解决方案,但我猜您正在寻找适合初学者的解决方案

编辑

说到初学者友好:% 是返回除法余数的模运算符。因此,当您将 119 除以 60 时,它返回 59。是的,您也可以将 totime 除以 60 得到小时数,然后让整数除法完成这项工作,但它更好(阅读:更清楚阅读发生了什么)当你划分 (totime - tominutes) 因为它就像模数行的缺失部分

【讨论】:

  • 谢谢你,也为提示,它工作。我一直在为此苦苦挣扎。是的,我是编码初学者,很抱歉呵呵。
  • tohours = totime / 60; 就足够了,而不是tohours = (totime - tominutes) / 60;
  • 详细信息:C 中的整数除法,从 C99 开始,不会“向下舍入”(向 -infinity),而是向 0 舍入。实际上,真商的小数部分被丢弃。所以 -7/4 是 -1,而不是四舍五入的 -2。
猜你喜欢
  • 1970-01-01
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多