我需要编写接受三个整数作为输入的程序(小时,分钟,持续时间)。小时是24小时格式。小时和分钟应视为开始时间,持续时间应以分钟为单位。然后,您应该计算结束时间并以##:##
格式正确显示。这就是我得到的,但我的开始时间显得很奇怪。
#include <stdio.h>
int main(int argc, char *argv[])
{
int h=0,m=0,d=0,ht=0,t=0;
printf("Starting Hours: ");
scanf("%d",&h);
printf("Starting Minutes: ");
scanf("%d",&m);
printf("Starting Time is %d,%d ,What is the duration");
scanf("%d",&d);
t=(m+d);
ht=t/60;
h=(h+ht)%24;
m=t%60;
printf("Ending Time: %d:%d",h,m);
getchar();
return 0;
}
我的开始时间显示如下:当我输入12小时,52小时输入时,我的开始时间显示为
-2114693200:1
不确定为什么会发生
答案 0 :(得分:1)
缺少printf()中的参数,导致未定义的行为。
printf("Starting Time is %d,%d ,What is the duration");
应该是
printf("Starting Time is %d,%d ,What is the duration",h,m);
除非您想将小时数转换为天数,否则您也无需以24为模数...如果您还需要存储和打印天数。
h=(h+ht)%24;
答案 1 :(得分:0)
您没有向printf()
中的格式说明符提供参数。它调用undefined behavior。
引用C11
,章节§7.21.6.1, fprintf()
[...]如果格式的参数不足,则行为为 未定义。 [...]
你需要写
printf("Starting Time is %d,%d ,What is the duration", h, m);
也就是说,始终检查scanf()
的返回值,以确保扫描成功。