2017-09-29 24 views
0

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を含みます。

この問題の原因はわかりません。

答えて

3

これはなんですか?

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

ここelse文だけr[0]='0';その本体としてを持つものとしてinterpetedされます。 r[1]='0';は、else文に到達するかどうかに関係なく実行されます。

あなたの警告を有効にして、あなたが得る必要があります。

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

thisiは24で午後12時03分03秒に変換し、時間午前12時03分03秒午後(S)へ

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

が変更に時間フォーマット。 –

+1

@ user89669重要な点は、ステートメントの前後に中カッコを入れなかったことです。したがって、2番目のステートメントは 'else'の一部ではなく、いつも終わっています。 – Barmar

+0

それらを同じ行に置くことはそれらをブロックにグループ化せず、中括弧のみで行います。 – Barmar

関連する問題