OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

getchar関数について

  • 困ってます
  • 質問No.213898
  • 閲覧数288
  • ありがとう数2
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 95% (39/41)

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

int d;
d = getchar();

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

でも、

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

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

なぜでしょう?

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

よろしくお願いします。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル12

ベストアンサー率 40% (237/589)

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

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

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

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

お礼率 95% (39/41)

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

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

回答ありがとうございました。
助かりました。
投稿日時 - 2002-02-08 14:24:48
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ