我只是学习C而且我有一个从一定时间开始的课程,我必须增加一定的额外时间,然后显示新的时间。我已经得到它来添加分钟,但我的结果显示我正在添加数字。
示例是我从640
开始,然后想要添加30
分钟,但它显示为670
,但我需要它显示为710
。我想提示/提示,而不是实际的编程,因为我想在此时尝试自己计算。谢谢你的时间。
答案 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
的正确结果。