2013-03-21 2 views
0

Так что в основном я просто хочу читать символы от пользователя и информировать свой код о том, что когда пользователь вводит определенную комбинацию (например, CTRL + F - но без подтверждения с помощью Enter, для exmaple), это конец ввода. Как я могу это сделать? Я только знаю, как читать символы с ввода и сравнения их ASCII в ...Чтение комбинации без подтверждения с enter?

+0

Windows или Linux или что-то еще? –

+0

Извините, что не упоминал, Windows. – Straightfw

+0

может ли он быть закончен конкретным персонажем? – 4pie0

ответ

0

попробовать

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

int main() 
{ 
    bool keepGoing = true; 
    char key = ' '; 
    while (keepGoing){ 
     cout << "Enter a key" << endl; 
     while(_kbhit()){ 
     key = _getch(); 
     cout << "You entered: " << key << endl; 
     } 
    } 
} 

затем указать разделитель, когда закончится цикл.

если на linux проклятия имеются. есть также функция getch. вы должны использовать проклятия, если вы нацелены на совместимость между платформами. Библиотечные функции ncurses аналогичны функциям в conio.h. ncurses tutorial

+0

И в каком файле заголовка есть _kbhit() и _getch()? –

+0

@Matt Peterson conio.h – 4pie0

0

Системный вызов Windows ReadConsoleInput позволяет вам напрямую считывать ввод в консоль. Вы можете обернуть этот вызов в функцию, которая просто извлекает основные данные из нескольких параметров функции ReadConsoleInput. Вы можете написать функцию, чтобы проверить, есть ли какой-либо ввод, используя GetNumberOfConsoleInputEvents.

1

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


То, о чем вы просите, не должно многое делать с чтением символов. Фактически, CTRL не является персонажем вообще. В основном вы просто проверяете ключевые нажатия. Обработка такого ввода зависит от платформы, и даже на одной платформе будут существовать несколько методов. Один из способов сделать это для окон - использовать GetAsyncKeyState. Эта функция проверяет, нажат ли указанный ключ прямо сейчас. Обратите внимание, что он не «запоминает» вход, поэтому вам нужно будет проверять эту функцию много раз в секунду, чтобы зарегистрировать все входные данные пользователя.

Вы предоставляете функцию с одним аргументом, определяющим ключ, для которого вы хотите проверить состояние. Список всех ключевых кодов можно найти here

Пример:

#include <iostream> //for output 
#include <windows.h> //for GetAsyncKeyState 

int main() 
{ 
    while(true) 
    { 
     if(GetAsyncKeyState(VK_CONTROL)) //CTRL-key is pressed 
     { 
      if(GetAsyncKeyState(0x46)) //F-key is pressed 
       std::cout << "CTRL-F is pressed" << std::endl; 
      if(GetAsyncKeyState(0x58)) //X-key is pressed 
       break; 
     } 
    } 
    std::cout << "CTRL-X was pressed, stopping.." << std::endl; 
} 

Этот пример будет постоянно проверять, если CTRL-F вытесняется, и если так писать выход, пока CTRL-X не будет нажата.

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