ほとんどの人が知っているように、getch はユーザーがキーを押してから値を返すまで待機します。ユーザーが現在キーを押しているかどうかを確認する方法はありますか? これが私がやろうとしていることです:
while(1){
char x = getch();
if (x){
//blah
}
else if(y == true){
//blah
}
}
助言がありますか?
ほとんどの人が知っているように、getch はユーザーがキーを押してから値を返すまで待機します。ユーザーが現在キーを押しているかどうかを確認する方法はありますか? これが私がやろうとしていることです:
while(1){
char x = getch();
if (x){
//blah
}
else if(y == true){
//blah
}
}
助言がありますか?
関数がありkbhit()
ます (または_kbhit()
、Microsoft のライブラリを使用している場合)。
MSDN: http://msdn.microsoft.com/en-us/library/58w7c94c(VS.80).aspx
「キーが押された場合、_kbhit はゼロ以外の値を返します。それ以外の場合は、0 を返します。」
編集:一部のコメンターが指摘したように、それは標準ではありません。
キーが押されるまでスクリプトを一時停止するだけの場合は、 getch が機能しますが、押された文字が画面に表示されないようにする場合 (または、押されたキーを気にしない場合) を使用できます
system("pause > NUL");
Windowsの「一時停止」コマンドを呼び出し、表示されたテキストと入力(通常は「続行するには何かキーを押してください...」と表示されます)を空の深淵にルーティングします。
別の方法として、GetAsyncKeyState() などの関数を使用し、すべての入力コードをループして、現在押されているキーがあるかどうかを確認します。この方法は、処理ループを実行しようとしていて、ユーザーが特定のキー (たとえば、Escape) を押したときにブレークアウトしたい場合に、はるかにうまく機能します。これを使用して、ユーザーが何らかのキーを押しているかどうかを確認すると、かなりの処理能力が浪費されます。