我正在解决一个问题,要求将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。
我不知道造成这个问题的原因。
答案 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';
}