TOP >> マニアックなプログラミング
トリッキーコードネット トリッキーなコード

【C言語】kbhit・_kbhit関数について

WindowsでのC言語開発の際に使用される、kbhit関数(キーイベント取得)について説明します。

※ このkbhit関数はLinuxのCコンパイラには存在しません。
LinuxのCコンパイラでkbhit関数を使用したい場合は、Linuxでのkbhit関数を参照して下さい。


kbhit関数とは、何かキーが押された場合0以外の値を返し、何もキーが押されていない場合は0を返す関数 です。

そして、関数が0以外の値を返した場合、バッファ内に入力されたキーが残ったままになっている為、
kbhit()の後には getch()でキー情報を取り出すのが定石となっています。


VC++でのヘッダーは、conio.hです。
また、VC++2005以降、kbhit関数は _kbhit関数に変更(?)されました。



・・・というわけで、VC++2010での_kbhit関数の使用例は以下の通り。

#include <stdio.h> #include <conio.h> #define ESC 27 int main(void) { int cnt = 0; while (1) { if (_kbhit() && _getch() == ESC) { _cputs("\r\nYou Hit Esc-Key!!\r\n"); break; } printf("%d\r", ++cnt); } return 0; }
実行結果) _kbhit関数の使用例 実行するとカウンターが凄い勢いで回転し、ESCキーを押すとプログラムが終了します。 (カウンターの出力方法は、コチラを参照して下さい。) VC++2010っぽく、 kbhit() のかわりに _kbhit()を、 getch() のかわりに _getch() を、 puts() のかわりに _cputs() を 使用してみました^^;) この例だけだと「な~んだ、詰まらない」という気がしますが、 例えばC言語でテトリス・ぷよぷよ・インベーダーゲーム等のゲームを開発する際は、このkbhit関数は非常に重宝しますよ~。
ひょっとしたら参考になるかもしれないページ:
トリッキーコードネット の TOPへ HOTNEWS の 総合TOPへ