2013-07-06 8 views
4

Я пишу специальную консольную программу. И я хочу, чтобы он выглядел как настоящий. Поэтому я хочу связать некоторые действия с событиями нажатия клавиш.Как обрабатывать события нажатия клавиш в C++

Например, когда стрелка вверх нажата, ранее выполняемые команды должны отображаться пользователю. Я знаю о SDL. Но я думаю, что это не стандартная библиотека, не так ли?

Если есть другая альтернатива, входящая в стандартную библиотеку CPP, пожалуйста, дайте мне знать.

Спасибо.

+1

Какая у вас ОС? И выберите C или C++, не помещайте оба. – nouney

+0

Вы не можете сделать это с помощью * just * стандартной библиотеки ('c' или' C++ '). Вам нужны другие библиотеки или утилиты os. Например, вы можете использовать библиотеку [readline] (http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html) для обработки истории ввода в Linux. – BoBTFish

+0

Это зависит от ОС. –

ответ

5

Вы ничего не найдете в стандартной библиотеке для этого. Все зависит от платформы. В Windows у вас есть такие функции, как GetAsyncKeyState, чтобы получить состояние клавиши на клавиатуре, например.

SDL и SFML обе имеют независимую платформу обработки событий.

+0

Будет ли SDL или SFML редактировать историю? – BoBTFish

+0

Нет. Ему придется самому справиться с этим. Они будут использоваться только для обработки ввода, управления окном и визуализации текста (предположим, что он создает совершенно настраиваемую консоль с нуля, независимо от консоли ОС). –

+0

все нормально, я сделаю это .. так что я должен продолжить SDL. –

1

Что вы описываете, это не «консольная программа» как таковая, а оболочка. Кроме того, вы не хотите обрабатывать входящие события, вы просто хотите просто прочитать из командной строки.

Для этого существуют различные способы. Windows имеет ReadConsoleInput. Более гибкий способ, однако, состоит в том, что вы используете функцию getline.

int main() 
{ 
    string mystr; 
    cout << "What's your name? "; 
    getline (cin, mystr); 

    return 0; 
} 

Чтобы сделать вас специальную вещь работает, то вы просто должны хранить предыдущие входы в std::vector<string> или аналогичный.

Для чтения необработанного ввода (без эха) из консоли, вы должны использовать _getch()

+4

Я согласен, что 'getline' - лучший способ справиться с простым чтением, но он не делает то, что задает вопрос. – BoBTFish

Смежные вопросы