无法将12小时格式转换为24小时格式

时间:2017-09-29 23:20:12

标签: c date if-statement

我正在解决一个问题,要求将12小时时间格式转换为24小时格式。我正在使用C语言来实现该程序。

我不知道为什么,但是我的程序输出PM中的任何输入都是从10开始的。例如,对于输入07:03:23 PM,输出应该是19:03:23,但是我的输出结果是10:03:23。对于输入03:03:23 PM,输出应该是15:03:23,但我的输出再次是10:03:23。

#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>

char* timeConversion(char* s)
{
    int t,k,i=1,l;
    char* r = malloc(50 * sizeof(char));
    if(s[8]=='P')
    {
        if(s[0]!='1'&&s[1]!='2')
        {
         t = ((s[1]-'0')*1+(s[0]-'0')*10) + 12;
         sprintf(r,"%d",t);
        }
        else
            r[0]='0';r[1]='0';
        for(i=2;i<8;i++)
        {
            r[i]=s[i];
        }

    }
    else
        for(i=0;i<8;i++)
            r[i]=s[i];
    r[i]='\0';
    return r;
}

int main() {
    char* s = (char *)malloc(512000 * sizeof(char));
    scanf("%s", s);
    int result_size;
    char* result = timeConversion(s);
    printf("%s\n", result);
    return 0;
}

timeConversion函数中,我已经分配了一个内存,其基址由char指针r指向。在r中,我在转换后存储结果。我使用sprintf()来存储&#34;整数&#34;的值。 t(包含转换为24小时格式后的前两位数字的值)到&#34;字符串&#34; r

我已使用调试器检查了程序,并且在执行sprintf()语句后,r包含值10,即使第一个输入案例中存储在t中的值为19。

我不知道造成这个问题的原因。

1 个答案:

答案 0 :(得分:3)

这是什么?

else 
  r[0]='0';r[1]='0';

这里的else语句是因为只有r[0]='0';作为其正文。 r[1]='0';将被执行,无论是否会达到else语句。

启用警告,您应该:

prog.c:20:9: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
         else
         ^~~~

将其更改为:

else {
  r[0]='0';
  r[1]='0';
}