dポイントプレゼントキャンペーン実施中!

前日質問にて以下のプログラムで、二度目のscanf()が無視されてしまう
旨質問したところ、1度目のscanfでの入力でエンターがバッファに残って
いるため、それを取り込んでしまうという回答いただきました。

改善方法として(*)のscanf関数で「%c」の前に空白を入れたところ
正常に動作し、改善されたのですが、なぜ改善されたのかご教示願えませんでしょうか?

よろしくお願いします

#include <stdio.h>

int main(void)
{
  int g;
  char ch;
  
  do {
    printf("何ガロンですか?: ");
    scanf("%d", &g);
    printf("%.2fリットルです\n", 3.7854 * g);
    printf("また計算しますか?Y/N : ");
(*) scanf("%c", &ch);
  } while(ch == 'Y' || ch == 'y');
  return 0;
}

A 回答 (3件)

★アドバイス


・次のリンクの一番下に空白文字の読み飛ばし方法が載っています。
 http://www9.plala.or.jp/sgwr-t/c/sec05.html→『第5章 標準入出力関数(1)』
・以上

参考URL:http://www9.plala.or.jp/sgwr-t/c/sec05.html
    • good
    • 1
この回答へのお礼

ありがとうございます。

この類の誤作動は常識なんですね
気付かなかったのは本の読み方が悪いのか、選んだ本が悪いのか・・
はは・・

初歩的なところで躓くとストレスは非常に大きいですので
解決してすっきりしました。

本当にありがとうございます

お礼日時:2007/12/16 15:36

・以上


★追記。
・次のサイトも読んでみて下さい。
 http://wisdom.sakura.ne.jp/programming/c/c58.html→『scanf()関数』
 基本的には scanf の仕様です。
 scanf でも空白を含めて入力するには scanf 出利用可能な『正規表現』を使います。
・以上。

参考URL:http://wisdom.sakura.ne.jp/programming/c/c58.html
    • good
    • 0

ぶっちゃけ、scanf() を使うのを止めれば全ては解決ですが。

    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています