- ベストアンサー
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 と予想と違う結果が繰り返されるんですが なぜか分かりません。アドバイスを頂けな いでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
scanf("%c",c);だと、標準入力バッファから1バイトしか取り込みません。 あなたは画面が停止したときにキーボードを2回たたいていませんか。(予想では、aとリターンの2回) 改行文字も1バイトに数えます。 char c;をchar s[32];などとして、 scanf("%c",c);をscanf("%s", s);と変えればあなたの思っている動作になるのではないでしょうか。
その他の回答 (2)
よくわからないけど・・・、こんな感じ? #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は一文字入力した後、そのあとの文字列を読み込むけど代入はしないといったかんじです。
お礼
質問が分かりにくくすみませんでした。 ありがとうございました。参考にさせていただきます。
- jacta
- ベストアンサー率26% (845/3158)
> scanf("%c",c);←入力は自由 ポインタを渡すべきところに不定値を渡しているようです。こんなことをすると、何が起きても不思議ではありません。
お礼
確かにそうでした。ありがとうございます。
お礼
&を付け忘れていました。 %sにすれば予想していた結果になりました。 なぜ%sにすればなるのか研究してみたいとおいます。解決することができました。ありがとうございました。