Всякий раз, когда я запускаю код, мой случай по умолчанию всегда выполняется с другими случаями (C ++) - PullRequest
0 голосов
/ 01 сентября 2018

Я тоже использовал Break в конце каждого случая, но он не ломается. Я думаю, что _getch() принимает два входа за раз, или у него всегда есть некоторые данные мусора в начале каждого цикла.

Вот код, генерирующий эту проблему.

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

int main()
{
    int c = 0;
    while (1)
    {
        c = 0;

        switch ((c = _getch())) {
        case 72:
            cout << endl << "Up" << endl;//key up
            break;
        case 80:
            cout << endl << "Down" << endl;   // key down
            break;
        case 75:
            cout << endl << "Left" << endl;  // key left
            break;
        case 77:
            cout << endl << "Right" << endl;  // key right
            break;
        default:
            cout << endl << "null" << endl;  // not arrow
            break;
        }

    }

    return 0;
}

[Here my output]

1 Ответ

0 голосов
/ 01 сентября 2018

Для клавиш со стрелками генерируются два значения. Первый из них 0xE0 указывает на то, что следующий является чем-то необычным.

Ваш код исправлен:

#include <conio.h>
#include <iostream>

int main()
{
    int c = 0;
    do {
        c = _getch();
        if (c == 0xE0)
            c = _getch();

        switch (c) {
        case 72:
            std::cout << "Up\n";
            break;
        case 80:
            std::cout << "Down\n";
            break;
        case 75:
            std::cout << "Left\n";
            break;
        case 77:
            std::cout << "Right\n";
            break;
        default:
            std::cout << "null\n";
            break;
        }

    } while (c != 0x1B /* esc */);
}
...