1

特定のキーが押されたときに他の機能を実行する機能があります。「s」を押すと、プレイヤーを撃ちます。「h」を押すと、プレイヤーに害を及ぼすだけです。問題は選択 = getch(); にあります。下:

void* command(void* data)
{
    choice = getch(); //This is where the problem begins...
    cout << "Command Prompt\n\n"; //I must click enter twice to view this output. why is this???
    while (health > 0)
    {
        if (choice == 's')
        {
            playershot();
        }

        if (choice == 'h')
        {
            playerharm();
        }
    }
}

これが実行されると、何らかの理由で、コンソールは ENTER を 2 回押すのを待ってから、<< "コマンド プロンプト"; を実行します。2回のENTERの後のみ、「コマンドプロンプト」の出力が表示されます。なぜ getch() は私の文字と 2 つの ENTER を入力するのを待っているのですか? この関数から getch() を使用する他の場所では、正常に動作し、通常は Enter キーを押す必要はありません。このコードのどこが間違っていて、Enter キーを 2 回押して、最終的に「コマンド プロンプト」に移動するのですか? ありがとう。

4

2 に答える 2

2

getch入力バッファから文字を読み取ります。入力バッファリングの設定方法によっては、入力された文字がすぐにバッファに入れられない場合があります。文字は、他のイベント (「Enter」を押すなど) が発生するまで、ドライバまたは他の場所に保持されている可能性があります。

入力処理の設定方法は、システム/OS によって異なります。

于 2012-12-29T03:29:54.980 に答える
0

_get する必要があります。MSDN によると、getch は非推奨であり、_getch を使用する必要があります。

この POSIX 関数は、Visual C++ 2005 以降では非推奨です。代わりに、ISO C++ 準拠の _getch を使用してください。

ここに_getchへのリンクがあります

于 2012-12-29T05:46:35.300 に答える