質問: c言語のscanf関数がよくわかりません。 以下のコードで(1)は入力バッファに改行が残っているため、 変数aで改行を読み取ってしまっているのはわかります。 しかし(2)では入力バッファに改行が残っているのにも関わらず、 正常に入力できるのはなぜでしょう?読み飛ばされないまでも b[0]に改行が入るような気がするのですが... また、この出力ではないのですが(3)に関して、 %dでもバッファに改行があるの関わらず、それを 読み取らないのはどうしてでしょうか? 説明がわかりにくくてすいません。 回答よろしくお願いしますm(__)m ``` #include int main(){ char x,a,b[10]; int c; //(1) printf("x: "); scanf("%c",&x); printf("a: "); scanf("%c",&a); printf("\n"); //(2) printf("x: "); scanf("%c",&x); printf("b: "); scanf("%s",b); printf("\n"); //(3) printf("x: "); scanf("%c",&x); printf("c: "); scanf("%d",&c); printf("\n"); printf("c: ",&x); scanf("%c",&x); return 0; } //////////////出力///////////////// x: 1 a: x: 2 b: 3 x: c: 4 c: ```
回答: キーボードからの入力に`scanf`は使わない方が良いです。`fgets`+`sscanf`を使いましょう。 > > しかし(2)では > > > `%s`は、前の空白文字(空白、タブ、改行)を読み飛ばすからです。 > > (3)に関して、 > > > (2)で`%s`の入力時の最後の改行は残っていて、(3)の`x`に入ります。