12時間形式を24時間形式に変換するかどうか質問する問題を解決しています。私はプログラムを実装するためにC言語を使用しています。12時間形式から24時間形式に変換できません
なぜか分かりませんが、私のプログラムの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
関数でIは、そのベースアドレスチャーポインタr
によって指し示されたメモリを割り当てています。 r
に変換後の結果を格納します。私はsprintf()
を "整数" t
(24時間形式に変換した後の最初の2桁の値を含む)の値を "string" r
に格納するために使用しました。
デバッガを使用してプログラムをチェックして、t
に格納されている値が最初の入力の場合は19であっても、r
の値がの文の実行後に値10を含みます。
この問題の原因はわかりません。
thisiは24で午後12時03分03秒に変換し、時間午前12時03分03秒午後(S)へ
が変更に時間フォーマット。 –
@ user89669重要な点は、ステートメントの前後に中カッコを入れなかったことです。したがって、2番目のステートメントは 'else'の一部ではなく、いつも終わっています。 – Barmar
それらを同じ行に置くことはそれらをブロックにグループ化せず、中括弧のみで行います。 – Barmar