私はC文字配列の初心者です。文字配列を読み込むためには、scanfやgetsを使って%s書式指定子を使う必要があることを知っています。cでの文字配列の読み込み
私は時間をhで表し、hは時間を表し、mは分を表します。
しかし、私は、入力として11:30
を与えるときには、出力として11:30::30
として時間を印刷します。誰かが私に理由を言うことができますか?
ありがとうございます。
私はC文字配列の初心者です。文字配列を読み込むためには、scanfやgetsを使って%s書式指定子を使う必要があることを知っています。cでの文字配列の読み込み
私は時間をhで表し、hは時間を表し、mは分を表します。
しかし、私は、入力として11:30
を与えるときには、出力として11:30::30
として時間を印刷します。誰かが私に理由を言うことができますか?
ありがとうございます。
あなたはいくつかのことを行うことを忘れている:
あなたの文字配列がnullで終了する必要があります。 2の代わりに3のサイズを持つh
とm
を作成して、ヌル文字の'\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.
}
フォーマット指定子に '2'の幅がないとどうなりますか? 2文字を読んだ後で読書を止めませんか? – user6181297
それは私が考えていたことですが、私がテストしたときに、コロンの文字がhに含まれていて、印刷するときmのメモリに広がっていました。 –
最初の文字列からコロンを除外した別のソリューションの最新の編集を参照してください。 –
は、この二つのオプションを試してみてください、私は彼らが願っていますあなたを満足させる:
自分の将来の悲しみ保存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;
- '')(取得使用することはありません。これはもはやC標準ライブラリの一部ではないことに注意してください。 – chux
[strptime(3)](http://man7.org/linux/man-pages/man3/strptime.3.html)と[strftime(3)](http://man7.org/linux/)を参照してください。 man-pages/man3/strftime.3.html)を参照してください。あなたのシステムにそれらがあるかもしれません。 –