スポンサーサイト

Category : スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

kbhit() と getch() の使い方

Category : プログラム
stopeです。最近よくC言語で用いている、二つの関数について紹介します。
両方とも、conio.hのincludeで使えるようになります。恐らくWindows限定になるかと。


- kbhit()
標準入力上にデータがあるかどうかを調べます。
存在する場合は 1 無い場合は 0 を返します。


標準入力なので、stdin上になる筈です。以前学校の授業で、
scanf()関数は、戻り値として書式変換出来た要素数を返す。
変換が出来なかった入力に関しては、標準入力に残り続ける。
だから、scanf()を含む繰返し文は、ループを起こす。

とかがあったかと思います。
あの標準出力です。一応、

- fflush(stdin);

で標準入力を初期化する事が出来ます。


使用法
#include <stdio.h>
int main(void)
{
int i;
for (i = 0; ;i++) {
printf("%d ", i);
}
return 0;
}
実行すると、無限に i のカウントアップと出力をしつづけます。これに、
#include <stdio.h>
#include <conio.h>
int main(void)
{
int i;
for (i = 0;;i++) {
if ( kbhit() ) {
break;
}
printf("%d ", i);
}
return 0;
}
で、キー入力があった際には無限ループを抜けます。


- getch()
キーボードから1文字を取得する。returnとして取得した文字。
他の関数と違い、getch()はフィードバックを行わない。
つまり、ENTERで決定する必要のないgetchar。

先程の無限ループを、スペースキーが押された時にのみ終了するようにする。
#include <stdio.h>
#include <conio.h>
int main(void)
{
int i;
char buf;

for (i = 0; ; i++) {
if ( kbhit() ) {
buf = getch();
if(buf == ' ') {
break;
}
} else {
printf("%d \n", i);
}
}

return 0;
}



様々なサイトを調べてみると、

if (kbhit()) {
キー押下時の処理;
} else {
そうでない際の処理;
}

が基本構文らしいです。
こういった、様々な関数を用いる事で、C言語は便利になっていくのでしょうね。

Comment

非公開コメント

Profile

STOPE

Author:STOPE
連絡は、[stope1125@gmail.com]へどうぞ。

Category
Reports
Comments
Visitors
RSS
Links
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。