输入用户的小时和分钟,并添加持续时间以显示更新时间

时间:2016-02-25 13:08:21

标签: c time printf

我需要编写接受三个整数作为输入的程序(小时,分钟,持续时间)。小时是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

不确定为什么会发生

2 个答案:

答案 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()的返回值,以确保扫描成功。