幸いなことに、Windows 2000以降用の上記のWindows関数を使用していますが、コンソールでゲームを作成しているときに問題に遭遇しました:キーが押されるとすぐに、コンソールはkbhit( )キーが再び押されなくても機能します...
新しいキーを押さないと kbhit が渡されないように、キーボード プレス バッファをクリアする方法はありますか?
新しいライブラリのダウンロードが必要な場合は、できると思います...しかし、Windows標準の方法を望んでいます!
ありがとう!!
kbhit()
それが Windows の機能 だと言った人は、あなたに誤解を与えました。kbhit()
、getch()
およびそれらの親戚は、実際には(C言語バインディングへの)MS-DOS APIの一部です。 OS/2、Win32、およびその他の C/C++ コンパイラのランタイム ライブラリに存在するのは、単にMS/PC/DR-DOS プログラムの移植を支援するためです。ライブラリは、キーボードにアクセスするためのネイティブメカニズムが存在する場合はそれらにマップし、通常は、GUI ではなく TUI アプリケーションがキーボードにアクセスするための正しい方法でのみマップします。
新しい TUI アプリケーションを作成している場合は、MS-DOS API を使用しないでください。Win32 Console APIやOS/2 Console API、またはPOSIX General Terminal Interface (ncurses などを介して)など、ターゲットとするプラットフォームに適切なネイティブ API を使用します。
そうすれば、彼らのドキュメントを読んで、非破壊的な「ピーク」を行った後にキーボード入力の破壊的な「取得」を実行する方法を見つけることができます。または、実際にバッファ全体をフラッシュする方法は、それがやりたいことです。
明らかな選択はFlushConsoleInputBuffer