• ベストアンサー

for文,scanfについて

以下のプログラムを実行したのですが #include<stdio.h> #include<math.h> main(){ int i,b=5; char c; for(i=0;i<=9;++i){ printf("%d\n",b); scanf("%c",c);←入力は自由 } return 0; } 結果 | 予想 5  |  5 a   |  a 5  |  5 5  |  a a   |  5 5  |  a 5  |  5 a   |  a と予想と違う結果が繰り返されるんですが なぜか分かりません。アドバイスを頂けな いでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • rentahero
  • ベストアンサー率53% (182/342)
回答No.1

scanf("%c",c);だと、標準入力バッファから1バイトしか取り込みません。 あなたは画面が停止したときにキーボードを2回たたいていませんか。(予想では、aとリターンの2回) 改行文字も1バイトに数えます。 char c;をchar s[32];などとして、 scanf("%c",c);をscanf("%s", s);と変えればあなたの思っている動作になるのではないでしょうか。

swiss0
質問者

お礼

&を付け忘れていました。 %sにすれば予想していた結果になりました。 なぜ%sにすればなるのか研究してみたいとおいます。解決することができました。ありがとうございました。

その他の回答 (2)

noname#16765
noname#16765
回答No.3

よくわからないけど・・・、こんな感じ? #include<stdio.h> #include<math.h> main(){ int i,b=5; char c; for(i=0;i<=9;++i){ printf("%d\n",b); scanf("%c%*s",&c); } return 0; } %c%*sは一文字入力した後、そのあとの文字列を読み込むけど代入はしないといったかんじです。

swiss0
質問者

お礼

質問が分かりにくくすみませんでした。 ありがとうございました。参考にさせていただきます。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

> scanf("%c",c);←入力は自由 ポインタを渡すべきところに不定値を渡しているようです。こんなことをすると、何が起きても不思議ではありません。

swiss0
質問者

お礼

確かにそうでした。ありがとうございます。

関連するQ&A