Форум программистов, компьютерный форум CyberForum.ru

Обработка нажатия клавиш-стрелок - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.66
fenix117
8 / 8 / 1
Регистрация: 16.03.2011
Сообщений: 249
18.01.2012, 19:19     Обработка нажатия клавиш-стрелок #1
Добрый вечер, я делаю пошаговую демонстрационную программу различных методов сортировок в консоли, но не знаю как сделать так, чтобы при нажатии клавиши "вправо" или "влево"(без "enter"!!!) показывался следующий или предыдущий слайд, подскажите пожалуйста. Просто кроме "cin >> .." и "getline(cin, ..)" я не знаю как получить информацию с клавы, мне необходимо именно без enter.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2012, 19:19     Обработка нажатия клавиш-стрелок
Посмотрите здесь:

Обработка нажатия клавиш (Win32 Console Application) C++
C++ Нажатия клавиш
C++ Потоки:обработка нажатия клавиш; вычисления,прорисовка
Нереагирование на нажатия клавиш C++
C++ Обработчик нажатия клавиш
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
18.01.2012, 19:26     Обработка нажатия клавиш-стрелок #2
Для одного символа есть
C++
1
cin.get ()
, но там тоже будет присутствовать буферизация.
Vergil111
31 / 31 / 6
Регистрация: 30.11.2010
Сообщений: 81
18.01.2012, 19:35     Обработка нажатия клавиш-стрелок #3
Вам поможет функция ввода с эхом getche()
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
18.01.2012, 19:39     Обработка нажатия клавиш-стрелок #4
Цитата Сообщение от Vergil111 Посмотреть сообщение
ам поможет функция ввода с эхом getche()
Это не стандартная функция. Уже лучше getch (), зачем эхо.

Цитата Сообщение от fenix117 Посмотреть сообщение
клавиши "вправо" или "влево"
Только не перемешивайте с cin, метод буферизации у них разный.
Вообщем почитайте, может то что ищете http://ru.wikipedia.org/wiki/Conio.h
Serejke_qq
 Аватар для Serejke_qq
149 / 107 / 9
Регистрация: 06.07.2011
Сообщений: 224
Завершенные тесты: 2
18.01.2012, 19:39     Обработка нажатия клавиш-стрелок #5
используйте getch();
Vergil111
31 / 31 / 6
Регистрация: 30.11.2010
Сообщений: 81
18.01.2012, 19:44     Обработка нажатия клавиш-стрелок #6
go, почему нестандартная? вся разница между getch() и getche() в том, что у первой нету эха, а у второй есть. в любом случае придется подключать заголовочный файл <conio.h>. А выбор конкретной функции уже зависит от того, понадобится ли
fenix117, вывод информации о том, какая клавиша была нажата или нет
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
18.01.2012, 19:47     Обработка нажатия клавиш-стрелок #7
Цитата Сообщение от Vergil111 Посмотреть сообщение
почему нестандартная?
Потому что читать надо, я даже ссылку привел.
Почему
Цитата Сообщение от Вики
conio.h (от англ. console input-output — консольный ввод-вывод) — заголовочный файл, используемый в старых компиляторах, работающих в операционных системах MS-DOS, для создания текстового интерфейса пользователя. Тем не менее, он не является частью языка программирования Си, стандартной библиотеки языка Си, ISO C или требуемой стандартом POSIX.
Большинство компиляторов языка Си, предназначенных для UNIX и Linux, не имеют этого файла и не обеспечивают сопутствующих библиотечных функций.
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
18.01.2012, 20:13     Обработка нажатия клавиш-стрелок #8
Что-то я понять не могу, так у тебя что за программа-то? Если консольная, это один вопрос, если оконая, то другой вопрос. Во втором случае надо послать окну программы сообщение, на которое она должна определённым образом реагировать.
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
18.01.2012, 23:04     Обработка нажатия клавиш-стрелок #9
не пробовали использовать stdio, отключив буферизацию?
C++
1
setvbuf(stdin , NULL , _IOFBF , 0);
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
19.01.2012, 11:56     Обработка нажатия клавиш-стрелок #10
Цитата Сообщение от retmas Посмотреть сообщение
не пробовали использовать stdio, отключив буферизацию?
Это несколько грубовато.
Цитата Сообщение от fenix117 Посмотреть сообщение
мне необходимо именно без enter.
Зачем оно Вам?
fenix117
8 / 8 / 1
Регистрация: 16.03.2011
Сообщений: 249
19.01.2012, 13:56  [ТС]     Обработка нажатия клавиш-стрелок #11
Цитата Сообщение от fasked Посмотреть сообщение
Сообщение от fenix117
мне необходимо именно без enter.
Зачем оно Вам?
Ну так намного красивее и удобнее).

Добавлено через 1 час 16 минут
Какая то непонятка появилась с этим getch()
Я так понял функция возвращает кодировку символа, в коде примерно следующее:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
void display_sort(vector<sort> T)
{
    int t, i = 0;
    HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
    {
        system("cls");
        SetConsoleTextAttribute(h, 252);//красный на белом фоне
        cout<<"-------------------------------------------------------------------------------"<<endl;
        cout<<"\t\t\tДЕМОНСТРАЦИЯ"<<endl;
        cout<<"-------------------------------------------------------------------------------"<<endl<<endl;
        SetConsoleTextAttribute(h, 243);
        switch (number_sort)
        {
        case 1:
            cout <<"\t\t\tСортировка методом вставок"<<endl<<endl;
            break;
        case 2:
            cout <<"\t\t\tСортировка методом Шелла"<<endl<<endl;
            break;
        case 3:
            cout <<"\t\t\tБыстрая сортировка"<<endl<<endl;
            break;
        case 4:
            cout <<"\t\t\tСортировка методом Синглтона"<<endl<<endl;
            break;
        }
        SetConsoleTextAttribute(h, 240);
        cout << T[i] << endl;
        t = getch();
        if ((t == 49) && (i > 0))
        {
            --i;
        }
        else if ((t == 50) && (i < (T.size() - 1)))
        {
            ++i;
        }
    }
    while (t != 48);
}
Тоесть при нажатии "1" i уменьшается, а при нажатии 2 i увеличивается, при нажатии 0 - выход
Зацикливается на последней строчке while (t != 48); Нажимаю шаг с заходом (VS2010), моргает и остается на той же строчке с теми же локальными переменными. В чем проблема?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
19.01.2012, 14:06     Обработка нажатия клавиш-стрелок #12
fenix117, мы не модем знать, что находится в буфере, а getch () из него читает
Почистите буфер
C
1
2
int c;
while ( (c = getchar ()) != EOF && c != '\n' ) ;
Добавлено через 34 секунды
Цитата Сообщение от fenix117 Посмотреть сообщение
while (t != 48);
лучше так писать везде
C
1
while ( t != '0' );
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2012, 16:25     Обработка нажатия клавиш-стрелок
Еще ссылки по теме:

Обработка нажатия клавиш OPENGL C++
Не обрабатываются нажатия клавиш стрелок C++
C++ Обработка нажатия клавиш

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
fenix117
8 / 8 / 1
Регистрация: 16.03.2011
Сообщений: 249
19.01.2012, 16:25  [ТС]     Обработка нажатия клавиш-стрелок #13
Цитата Сообщение от go Посмотреть сообщение
fenix117, мы не модем знать, что находится в буфере, а getch () из него читает
Почистите буфер
Код C
1
2
int c;
while ( (c = getchar ()) != EOF && c != '\n' ) ;
Не получается(, Я его и перед getch() и после него ставил данную конструкцию, не помогает.

Добавлено через 1 час 49 минут
Уфф Разобрался) Правда не понял в чем была проблема. Просто сделал while (t != 48) с предусловием и заработало.
Yandex
Объявления
19.01.2012, 16:25     Обработка нажатия клавиш-стрелок
Ответ Создать тему
Опции темы

Текущее время: 01:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru