- ベストアンサー
2回目以降のgetchar()が反映されない
以下のプログラムでは2回目からのgetchar()が反映されませんでした。 #include<stdio.h> main() { char res ; printf("ウェスト 85以上?\n"); printf("Y or N.\n"); res = getchar(); if (res == 'y'){ printf("体重80以上?"); res = getchar(); if (res == 'y'){ printf("メタボです\n"); } } return 0; } 課題のテーマであるif文の条件式はできたのですが、文字入力がうまくいきません。 実行結果が以下のように、2回目のgetchar()入力が飛ばされてしまいます。 ウェスト 85以上? Y or N. y 体重80以上? 他のトピックで、for文にすることで解決していたのですが、この課題の場合for文にしきれなかったので新しく質問させていただきました。 このプログラムの解決法と、もしご存知でしたらgetcharやscanfが連続で使えない理由も教えていただけないでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
http://m--takahashi.com/bbs/pastlog/A7800/A7723.html http://www.aa.alpha-net.ne.jp/freeh/minimini/develop/cscanf.html getchではyを押した後のEnterも読みとって居るから。 連続した標準入力からの入力には気をつけてください。 #include<stdio.h> int main(void) { char res ; printf("ウェスト 85以上?\n"); printf("Y or N.\n"); res=getchar(); fflush(stdin); if (res == 'y'){ printf("体重80以上?"); res=getchar(); if (res == 'y'){ printf("メタボです\n"); } } return 0; }
その他の回答 (1)
- asuncion
- ベストアンサー率33% (2127/6290)
> fflush(stdin); 標準入力に対してfflush()するのは、未定義動作です。 fflush()は、出力ストリームに対して行なうものです。 rewind(stdin); の方がましかもしれません。
お礼
fflush()のような動作にもいくつかあるのですね、参考になりました。 回答ありがとうございます!
お礼
ありがとうございます!きちんと動作しました! バッファの掃きだしが必要だったんですね、ありがとうございました!