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 もないようだ。
ま、ないものはないので仕方がない。次に進むことにしよう。