Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語のkbhit関数とは?使い方・サンプルコードと注意点を解説

C言語のkbhit関数とは

ここでは、C言語における kbhit() 関数の機能について解説します。kbhit は「Keyboard Hit(キーボードヒット)」の略で、その名の通りキーボードのキーが押されたかどうかを検知するための関数です。

この関数は conio.h ヘッダーファイルに宣言されているため、使用する際はコードの先頭で該当ヘッダーファイルをインクルードする必要があります。

kbhit() の動作は非常にシンプルで、キーが押されていれば非ゼロの値を返し、押されていなければゼロを返すというものです。この特性を活かすことで、ユーザーの入力を待ち受けながら、プログラム本体の処理を止めることなく動かし続けることが可能になります。

サンプルコード

以下は、キー入力を検知して画面に表示し、ESCキーが押されると終了するプログラムの例です。

#include <stdio.h>
#include <conio.h>
main() {
    char ch;
    printf("Enter keys (ESC to exit)\n");
    while (1) { // キー入力を受け付ける無限ループ
        if (kbhit()) {
            ch = getch(); // 入力された文字を ch に格納
            if ((int)ch == 27) // ESCキーが押されたらループを抜ける
                break;
            printf("You have entered : %c\n", ch);
        }
    }
}

なお、元のコードでは if (kbhit) と関数呼び出しの括弧が抜けていますが、正しくは kbhit() のように呼び出す必要がある点にご注意ください。

実行結果

Enter keys (ESC to exit)
You have entered : i
You have entered : t
You have entered : D
You have entered : w
You have entered : 5
You have entered : /
You have entered : *
You have entered : +
You have entered :
You have entered : o
You have entered :
You have entered : &

kbhit() を使う際の注意点

kbhit() はC言語の標準ライブラリには含まれていないという点が最も重要な注意点です。この関数は MS-DOS や Windows 向けの古いコンパイラ(Turbo C++ など)が独自に提供している拡張機能であり、Linux や macOS など UNIX 系の環境ではそのまま利用できません。

可搬性(移植性)の観点から、本番環境やクロスプラットフォーム向けのコードでの使用は避けるのが望ましいでしょう。同様の「キー入力の有無を確認しながら処理を続行する」挙動が必要な場合は、端末を非カノニカルモードに設定するなどの OS 固有の手法で代替する必要があります。

また、サンプル内で使用している getch() も同じく conio.h 由来の非標準関数である点にも留意してください。学習用の小規模なデモプログラム以外での採用は慎重に判断しましょう。

  1. HTMLとXMLの違いとは?特徴・コード例・比較表で徹底解説

    HTMLとは HTML(HyperText Markup Language/ハイパーテキスト・マークアップ言語)は、Webページの構造を記述するために使われる言語です。HTML文書はさまざまな「HTML要素」で構成されており、各要素はHTMLタグとその内容によって成り立っています。 HTMLはハイパーテキスト言語であるため、リンクを通じて複数のドキュメント同士をつなぎ合わせることができます。現在の最新バージョンはHTML5です。HTMLは静的な言語であり、軽微なエラーは無視して表示される点や、終了タグの記述が必須ではない点が大きな特徴です。 HTMLのコード例 <!DOCTYPE htm

  2. C言語の配列とは?宣言・初期化の基本をサンプルコードで解説

    配列(Array)とは、同じ型の要素を連続したメモリ領域に格納したデータの集まりです。メモリ上の最も低いアドレスが先頭の要素に対応し、最も高いアドレスが末尾の要素に対応します。 配列のインデックス(添字)は0から始まり、配列サイズから1を引いた値(配列サイズ - 1)で終わります。また、配列のサイズは0より大きい整数でなければなりません。 配列のインデックスの例 具体的に例を見てみましょう。 配列サイズ = 10 の場合 配列の先頭インデックス = 0 配列の末尾インデックス = 配列サイズ - 1 = 10 - 1 = 9 C言語における配列の宣言 C言語で配列を宣言する構文は以下の通りで