0

キーボードの上下キーの押下を検出するアプリケーションを作成しましたが、これらのキーを押しても何も出力されません。

Visual C++2010を使用しています

    #include <iostream>
    #include <conio.h>
    using namespace std;

void main()
    {
        char x;

        while(1)
        {

            x = getch();
            if(x==0 || x==224)
            {
                x=getch();
                if(x==80)
                {
                    cout << "down"<<endl;
                }


                else if(x==72)
                {
                    cout << "up"<<endl;
                }
            }//if x==0 || x=224
        }//while1
    }//main

何が問題になる可能性がありますか?

ありがとう

4

3 に答える 3

2

機能しない理由に答えるために: ユーザーの入力を署名なしで使用しようとしています。文字変数が署名されているため、値が予想とは異なります。符号なし 224 は符号付き -32 です。

あなたのループに関する限り、これに変更することをお勧めします。

void main()
    {
        char x;

        while(true)
        {
            while(!kbhit()){}
            x = getch();

            if(x==0 || x==-32)
            {
                x=getch();
                if(x==80)
                {
                    cout << "down"<<endl;
                }


                else if(x==72)
                {
                    cout << "up"<<endl;
                }
            }//if x==0 || x=224
        }//while1
    }//main

プログラムは依然として永遠にループします。次に、追加した次のループは、キーが押されていない間 (バッファリングされている間) ループし続けます。次に、 getch() はバッファから次の文字を取得します。あなたが直面していた問題は、技術的に正しい 224 (0xE0) があったことです。ただし、バイナリでは明らかに -32 と 224 は同じように見えます。

最初は少し同じ問題に遭遇しました。コードが正しいコード ブロックにヒットしなかった理由がわかりませんでした。最初の文字が実際には -32 (0xE0) だったからです。

これは本当に古い質問ですが、それが何らかの助けになることを願っています.

于 2013-10-23T02:28:26.093 に答える
1

curses.hライブラリを使用できます。彼らのガイドを読んでください。そこからは非常に簡単です。getch()(入力を char ではなく int に格納する)を使用して入力を取得した後、定義されたkeycodesを使用して、それが矢印キーの 1 つであるかどうかを確認できます。keypad(stdscr, TRUE)プログラムが矢印キーを認識できるようにするために、以前に使用したことを確認してください。

于 2017-04-20T10:36:20.540 に答える
0

kbhit() を使用して、キーボードの矢印キーを取得します

于 2012-12-21T12:58:06.560 に答える