计算和显示时间c

时间:2018-03-30 18:59:06

标签: c

我只是学习C而且我有一个从一定时间开始的课程,我必须增加一定的额外时间,然后显示新的时间。我已经得到它来添加分钟,但我的结果显示我正在添加数字。

示例是我从640开始,然后想要添加30分钟,但它显示为670,但我需要它显示为710。我想提示/提示,而不是实际的编程,因为我想在此时尝试自己计算。谢谢你的时间。

1 个答案:

答案 0 :(得分:1)

您希望对非小数的两个十进制值应用十进制数学运算。他们是某种类型的"小时:分钟"单位,印刷没有':'两者之间的性格。 C不知道这一点,因此当您将1添加到659并期望获得700时,它不会自动溢出会议记录。相反,你得到660,如果这是"时间" unit 是一个有效的整数类型 - 将是无效的值! "分钟"部分只允许00最多59

您可以将其与八进制数进行比较。 77是一个有效的八进制数,实际的十进制值为63(小数)。向其添加1并再次打印将产生100(八进制),而不是78

由于C在使用您的单位计数时无法检测到微小的溢出,因此要遵循的正确路线是将输入转换为"常规"小数点,做你想要的任何计算,然后转换回"时间"小数点。你可以用基本模数和除法运算来做到这一点 - "时间格式"一个正确的十进制值很容易,所以从那开始。然后应用相同的逻辑从小数转换回时间。

当你尝试喂它时,这会破坏"无效"诸如670(无效,70无法指示分钟数)或2510之类的值(我在24小时全天候计算错误 - 如果需要,请添加此项)。除了八进制数之外,编译器将无法指出错误的值。

下面的实际代码,由扰流标签隐藏。显示风险自负。

  

如果您立即将其蒙上:...我很失望。代码是全面而简短的,上面的冗长解释花了大约四倍的时间来编写。  

  #include <stdio.h>

#define NUMTOMINUTES(x) 100*((x)/60)+((x) % 60) #define MINUTESTONUM(x) (((x) % 100)+60*((x)/100))
int main (void) { int time_a, time_add, time_b;
time_a = 630; time_add = 40; time_b = MINUTESTONUM(time_a) + MINUTESTONUM(time_add);
printf ("time_a is %d\n", time_a); printf ("time_b is %d\n", NUMTOMINUTES(time_b));
return 0; }

即使你做630 + 110,这也能正常工作;它加起来为06:30 + 01:10,导致740的正确结果。