余skr 2022-12-27 00:18 采纳率: 92.3%
浏览 78
已结题

c语言将24小时转化为12小时制partial accepted

还是PAC了,请大家帮我看看输入什么的时候是错误答案,谢谢了。
编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。

输入描述

输入在一行中给出带有中间的:符号(半角的冒号)的24小时制的时间,如12:34表示12点34分。当小时或分钟数小于10时,均没有前导的零,如5:6表示5点零6分。

提示:在scanf的格式字符串中加入:,让scanf来处理这个冒号。

输出描述

在一行中输出这个时间对应的12小时制的时间,数字部分格式与输入的相同,然后跟上空格,再跟上表示上午的字符串AM或表示下午的字符串PM。如5:6 PM表示下午5点零6分。注意,在英文的习惯中,中午12点被认为是下午,所以24小时制的12:00就是12小时制的12:0 PM;而0点被认为是第二天的时间,所以是0:0 AM。

用例输入 1
21:11
用例输出 1
9:11 PM


#include<stdio.h>
int main(){
    int a,b;
    scanf("%d:%d",&a,&b);
    if(a>=0&&a<12) printf("%d:%d AM\n",a,b);
    if(a==12) printf("%d:%d PM\n",a,b);
    if(a>12&&a<24) printf("%d:%d PM\n",a-12,b);
    if(a==24) printf("%d:%d AM\n",a-24,b);
    return 0;
} 
  • 写回答

1条回答 默认 最新

  • ShowMeAI 2022-12-27 00:45
    关注

    程序有的小问题和修改方式如下,望采纳,有问题再沟通

    • ① 在第5行的 scanf 语句中,使用了 %d 读入时间的小时和分钟。这样做可能会导致程序无法正确读入前导的零,如 05:06 会被识别成 5:6。这样就会导致程序给出错误的答案。
    • ② 程序中的 if 语句是按照小时的范围来判断的,但是输入的时间是24小时制的,所以程序可能会给出错误的答案。例如,当输入的时间为 24:00 时,程序会输出 12:00 PM,但是正确的答案应该是 0:00 AM。

    修改方式:

    • 使用 %d:%d 读入时间,而不是 %d 读入小时和分钟。这样就可以保留前导的零,从而保证输入的时间能够被正确识别。
    • 使用 if 语句分别判断时间的小时和分钟,而不是按照小时的范围来判断。这样就可以避免出现上述问题。

    修改后的代码

    #include <stdio.h>
    
    int main()
    {
        int h, m;
        scanf("%d:%d", &h, &m);
    
        if (h == 0)
            printf("%d:%02d AM\n", 12, m);
        else if (h < 12)
            printf("%d:%02d AM\n", h, m);
        else if (h == 12)
            printf("%d:%02d PM\n", h, m);
        else
            printf("%d:%02d PM\n", h - 12, m);
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月4日
  • 已采纳回答 12月27日
  • 创建了问题 12月27日

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看