【问题标题】:Input hour and minute from user, and add duration to display updated time输入用户的小时和分钟,并添加持续时间以显示更新时间
【发布时间】:2016-02-25 13:08:20
【问题描述】:

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

不知道为什么会发生

【问题讨论】:

  • printf("Starting Time is %d,%d ,What is the duration"); 中,缺少两个%d 的参数。

标签: c time printf


【解决方案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;

【讨论】:

  • 呃!我错过了。谢谢。
  • 我还有一个问题,如何用if和loop来表示这个问题?
  • 这是我老师我们要使用的东西,但我不确定如何在这个问题中使用 if 和循环,因为它可以像我一样(简单地)编写。
  • 她可能希望你启用 n 次输入持续时间。这样程序就会一遍又一遍地询问您的持续时间。每次您输入新的持续时间时,它都会添加到最后一个并输出新时间。
  • 你可以使用while循环。 if 可能是为了检查持续时间是否为零或其他东西,以便它可以从循环中中断。如果你使用while,则不需要,只需检查while中使用的变量(变量!= 0)。
【解决方案2】:

您没有为printf() 中的格式说明符提供参数。它调用undefined behavior

引用C11,第 7.21.6.1 章,fprintf()

[...] 如果格式的参数不足,则行为是 不明确的。 [...]

你需要写

printf("Starting Time is %d,%d ,What is the duration", h, m);

也就是说,始终检查scanf() 的返回值以确保扫描成功。

【讨论】:

    猜你喜欢
    • 2017-03-25
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多