gpt4 book ai didi

C程序时间转换

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:03 25 4
gpt4 key购买 nike

我在 HackerRank 中发现了这个时间转换程序,我很惊讶这个程序在 HackerRank 中的编译方式(或者可能是我对 C 的误解)。

#include <stdio.h>

int main() {
int hh, mm, ss;
char tt[2];
scanf("%d:%d:%d%s", &hh, &mm, &ss, tt);
printf("%d\n", hh);
if(strcmp(tt, "PM") == 0 && hh != 12) hh += 12;
if(strcmp(tt, "AM") == 0 && hh == 12) hh = 0;
printf("%02d:%02d:%02d", hh, mm, ss);
return 0;
}

上面的程序,当我在我的计算机上运行时,使用 MinGW 32 位 GCC 编译器,我得到的 hh 值为零。

enter image description here

好吧,我认为可能是编译器问题并在 IDEONE 中运行代码,结果相同。

enter image description here

但是当我用 HackerRank 运行同样的代码时,所有的测试用例都通过了,我不知道这是怎么回事?

enter image description here

我现在很困惑,我这样做对吗?

最佳答案

通过更改以允许 tt 中的空间容纳 nul-terminating 字符,该代码在转换为军事时间方面运行良好。通过在声明/定义期间将 tt 初始化为零所有元素,您可以确保 tt 在添加 AM 或 PM 时以 nul 终止。例如

#include <stdio.h>
#include <string.h>

int main (void) {

int hh, mm, ss;
char tt[3] = "";

printf (" enter time in HH:MM:SS AM/PM: ");
if (scanf ("%d:%d:%d %[^\n]%*c", &hh, &mm, &ss, tt) != 4) {
fprintf (stderr, "error: invalid read of time.\n");
}

hh = (strcmp (tt, "PM") == 0 && hh != 12) ? hh + 12 : hh;
if (strcmp (tt, "AM") == 0 && hh == 12) hh = 0;
printf (" %02d:%02d:%02d\n\n", hh, mm, ss);

return 0;
}

示例使用/输出

$ ./bin/tmread
enter time in HH:MM:SS AM/PM: 11:59:04 PM
23:59:04

仔细阅读,如果您有任何问题,请告诉我。

关于C程序时间转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36570537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com