質問: c言語の非標準コンソール関数getch()について(2) こんにちは。windows98環境でのc言語の質問です。 以前質問したタイトルの事について、良い回答を頂いたのですが、うれしさのあまり、自分で実行してみる前に締切ってしまい補足の質問をすることができなくなってしまったので、すいませんがここでさせて頂きたいと思います。 以前の質問内容に関しては、そちらを見ていただきたいと思います。 その時は、leaz024さんに良回答を頂いたので、その方法を試してみました。cscanfを使うと改行が行われない為、 (略) printf("a= "); cscanf("%d",&a); printf("入力終了"); (略) があったときに画面からa= の表示が消えてしまい、入力終了だけが表示されてしまいます。また、他にも問題があったので、二つ目の方法を実行してみたいと思いました。 >scanfの前に__flush_win95_keyup_events() を呼び出すことで回避できます。 ということなので、これを記述してみたのですが、(ソフトはmicrosoft visual c++)次のようなエラーが出てしまいました。 c:\windows\デスクトップ\r_and_wl\program.c(36) : warning c4013: 関数 '__flush_win95_keyup_events' は定義されていません。int 型の値を返す外部関数と見なします。 リンク中... program.obj : error lnk2001: 外部シンボル "___flush_win95_keyup_events" は未解決です debug/r_and_wl.exe : fatal error lnk1120: 外部参照 1 が未解決です。 link.exe の実行エラー 何かヘッダファイルをインクルードしなければならないのでしょうか? 以上なのですが、宜しくお願い致します。 また、他の解決策でも良いので宜しくお願い致します。 関連url:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=187990
回答: leon-10さん、すみません、leaz024です。 まず、cscanf についてですが、この関数は少し癖があるんですよ。 例えば、数値入力時には、数字以外のキーが押された時点で入力が終了されてしまいます。 また、入力終了のために打った enter で、カーソル位置を一番左に戻してしまうため、その後何かを表示すると、それまで表示していた内容の上に上書きされてしまいます。 (数字だけをたくさん入力すれば、「入力終了」が表示されても、入力した内容が残って見えるはずです。) なので、特に getch による問題が起きないところなら、scanf を使った方が良いです。 それから、__flush_win95_keyup_events については、私の調べが足りませんでしたね、すみませんでした。 私は borland c++ 5.5.1 for win32 を使用しているので、vc++ はちょっと分からないんですよ^^; ちなみに上記では、conio.h の中に __flush_win95_keyup_events が宣言されていました。 多分ドキュメントが書かれていると思うので、conio.h の中を読んでみてはどうでしょうか。