getchar()とgetche()

getchar()

getchar() はキーボードから1文字読み込む関数。ただし、1文字だけ入力したのでは読み込んでくれなくて、ラインバッファに保存されている状態になっている。Enterキーが押された時点ではじめて1文字読み込む。この時、ラインバッファには文字が残っていて、他の入力要求、例えば scanf などで読み込むことができる。
なんか面倒だけど、歴史的経緯があるそうな。

#include

int main(void)
{
    char ch;

    ch = getchar();
    printf("Typed character: %c.\n", ch);

    return 0;
}

実行結果。書く入力の最後に Enter キーを押している。

takatoh@nightschool $ ./sample_3_1a
x
Typed character: x.
takatoh@nightschool $ ./sample_3_1a
xyz
Typed character: x.

getche()

ラインバッファを利用しない、1文字入力の関数もある。本には「ANCI C で規定された関数でないものの、ほとんどのコンパイラはそれを getche() という名前で呼んでいます。」と書かれている。また、getche() を使うには conio.h ヘッダファイルが必要だとも。
というわけで、次のようなプログラムを書いた。

#include
#include

int main(void)
{
    char ch;

    printf("Input a character: ");
    ch = getche();
    printf("\nASCII code is %d.\n", ch);

    return 0;
}

ところが、これをコンパイルするとエラーになる。

takatoh@nightschool $ gcc sample_3_1b.c -o sample_3_1b
sample_3_1b.c:2:19: fatal error: conio.h: そのようなファイルやディレクトリはありません
 #include <conio.h>
                   ^
compilation terminated.

どうやら gcc は「ほとんどのコンパイラ」に含まれないらしい。ググってみてもやはり gcc には getche() も conio.h もないようだ。
ま、ないものはないので仕方がない。次に進むことにしよう。