为什么我的_getch()无法正常工作?

时间:2017-03-29 05:26:22

标签: c++ visual-studio-2015

首先抱歉我的英语。 我试图制作一个控制台游戏。在游戏结束时,我想通过使用键盘上的箭头键选择是或否来让用户选择继续游戏。但它现在很奇怪。当我按下箭头键时,光标应该移动,但它只会移动一点,然后返回选择“是”。我真的无法弄清楚这里发生了什么,所以我想问一个知道为什么会这样的人。请教我,我做错了什么。 谢谢。

void askForRestart() {
bool yesOrNo = true;

system("cls");
cout << "You died." << endl;
cout << "Restart?" << endl;
cout << "> YES" << endl << "  NO";
while (true) {
    int arrowKeycode = 0;




    switch (arrowKeycode = _getch()) {
    case KEY_ENTER:
        break;
    default:
        if (yesOrNo) {
            yesOrNo = false;
            system("cls");
            cout << "You died." << endl;
            cout << "Restart?" << endl;
            cout << "  YES" << endl << "> NO";
            break;
        }
        else {
            yesOrNo = true;
            system("cls");
            cout << "You died." << endl;
            cout << "Restart?" << endl;
            cout << "> YES" << endl << "  NO";
            break;
        }


    }
    cin.clear();
    //cin.ignore(10000, '\n');
}

}

1 个答案:

答案 0 :(得分:0)

因为这是它的工作原理。对于普通字符键(数字,字母),它返回键码。但是如果你点击箭头或功能键,_getch会返回0,这表示你必须再次调用_getch来获取实际的密钥代码。

MSDN:

  

当读取功能键或箭头键时,每个功能必须被调用两次;第一个调用返回0或0xE0,第二个调用返回实际的键代码。

所以你应该改变你的关键阅读程序。