アプリ版:「スタンプのみでお礼する」機能のリリースについて

初歩的なことなのかもしれませんが、お分かりになる方、教えてください。
getchar関数は、

int d;
d = getchar();

のようにして使いますよね。

でも、

int c,d;
do{
 scanf("%d",&c)
}while(c!= 0);
d = getchar();

のように、getcharの前に繰り返し処理を置くとうまく実行できません。

なぜでしょう?

ちなみにソフトはVisual C++6.0をつかってます。

よろしくお願いします。

A 回答 (1件)

scanf 文の最後に“;”が無いのは書込みミスだとして…



この場合、d に得られる文字は常に改行(0x0a)のはずです。
この scanf を実行するためには、何かの数字の後に Enter を打つ必要があります。

でも、この改行文字は scanf では読み取られずに入力チャネルに残っています。
そのため、次の d = getchar(); では、必ずこの残った改行が読み込まれてしまうのです。

対策の一つとしては、ループを抜けた後、fflush(stdin); をまず実行してやれば良いと思います。
(VC++6.0 SP5 でサンプルコードを書いて、確認しました。)
    • good
    • 0
この回答へのお礼

早速の回答、ありがとうございます。
試してみたところ、正常に動きました!
まさか scanf が悪さをしているとは思ってもみなかったので…

Cの経験者の人たちが scanf は使えないと言われているのも
こんなところに原因があるんでしょうね。

回答ありがとうございました。
助かりました。

お礼日時:2002/02/08 14:24

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