プロが教えるわが家の防犯対策術!

以下のプログラムを実行したのですが
#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
と予想と違う結果が繰り返されるんですが
なぜか分かりません。アドバイスを頂けな
いでしょうか?

A 回答 (3件)

scanf("%c",c);だと、標準入力バッファから1バイトしか取り込みません。



あなたは画面が停止したときにキーボードを2回たたいていませんか。(予想では、aとリターンの2回)
改行文字も1バイトに数えます。

char c;をchar s[32];などとして、
scanf("%c",c);をscanf("%s", s);と変えればあなたの思っている動作になるのではないでしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/12/09 00:51

よくわからないけど・・・、こんな感じ?


#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は一文字入力した後、そのあとの文字列を読み込むけど代入はしないといったかんじです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/12/09 00:44

> scanf("%c",c);←入力は自由



ポインタを渡すべきところに不定値を渡しているようです。こんなことをすると、何が起きても不思議ではありません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/12/09 00:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!