2016-08-01 10 views
-1

私はC文字配列の初心者です。文字配列を読み込むためには、scanfやgetsを使って%s書式指定子を使う必要があることを知っています。cでの文字配列の読み込み

私は時間をhで表し、hは時間を表し、mは分を表します。

しかし、私は、入力として11:30を与えるときには、出力として11:30::30として時間を印刷します。誰かが私に理由を言うことができますか?

ありがとうございます。

+3

- '')(取得使用することはありません。これはもはやC標準ライブラリの一部ではないことに注意してください。 – chux

+0

[strptime(3)](http://man7.org/linux/man-pages/man3/strptime.3.html)と[strftime(3)](http://man7.org/linux/)を参照してください。 man-pages/man3/strftime.3.html)を参照してください。あなたのシステムにそれらがあるかもしれません。 –

答えて

2

あなたはいくつかのことを行うことを忘れている:

  • あなたの文字配列がnullで終了する必要があります。 2の代わりに3のサイズを持つhmを作成して、ヌル文字の'\0'を文字列の後に置くことができます。 scanfがこれを行います。

  • scanfで入力文字列のサイズを制限できます。 scanf("%2s", h)は、stdinから2文字の文字列をhに置きます。

  • ます。また、最初の文字列から:文字除外する可能性:scanf("%[^:]:%s", h, m)

が一緒にこのすべてを置くことを、我々が得る:

char h[3], m[3]; // Create two character arrays of 3 characters. 
if (scanf("%2[^:]:%2s", h, m) == 2) { // Read the time given and check that two items were read (as suggested by chux) 
    printf("%s:%s", h, m); // Print the time given. 
} 
+0

フォーマット指定子に '2'の幅がないとどうなりますか? 2文字を読んだ後で読書を止めませんか? – user6181297

+0

それは私が考えていたことですが、私がテストしたときに、コロンの文字がhに含まれていて、印刷するときmのメモリに広がっていました。 –

+0

最初の文字列からコロンを除外した別のソリューションの最新の編集を参照してください。 –

0

は、この二つのオプションを試してみてください、私は彼らが願っていますあなたを満足させる:

自分の将来の悲しみ保存

2 -

int i; 
char ch, hour[6]; 

printf("Input time\nex. HH:MM\n"); 


while(ch!='\n') 
{ 
    ch=getchar(); 
    hour[i]=ch; 
    i++; 
} 

hour[i]='\0'; 
printf("\n"); 
printf("Time: %s\n", hour); 
return 0; 
関連する問題