Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/40: Рейтинг темы: голосов - 40, средняя оценка - 4.90
8 / 8 / 2
Регистрация: 16.03.2011
Сообщений: 257
1

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

18.01.2012, 19:19. Показов 7630. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер, я делаю пошаговую демонстрационную программу различных методов сортировок в консоли, но не знаю как сделать так, чтобы при нажатии клавиши "вправо" или "влево"(без "enter"!!!) показывался следующий или предыдущий слайд, подскажите пожалуйста. Просто кроме "cin >> .." и "getline(cin, ..)" я не знаю как получить информацию с клавы, мне необходимо именно без enter.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.01.2012, 19:19
Ответы с готовыми решениями:

Не обрабатываются нажатия клавиш стрелок
почему при нажатии "СТРЕЛКА ВВЕРХ" или "СТРЕЛКА ВНИЗ" условие не выполняется?? ведь коды клавиш 72...

Обработка нажатия клавиш
Помогите, пожалуйста понять где ошибка. Есть функции: Move - двигает прямоугольник по консоли в...

Обработка нажатия клавиш
Здравствуйте! Необходимо решить следующую задачу: Есть консольное приложение, которое...

Обработка нажатия клавиш OPENGL
Привет! Столкнулся с такой проблемой, что для opengl, если пользуемся glutspecialfunc( для...

12
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
18.01.2012, 19:26 2
Для одного символа есть
C++
1
cin.get ()
, но там тоже будет присутствовать буферизация.
1
31 / 31 / 16
Регистрация: 30.11.2010
Сообщений: 81
18.01.2012, 19:35 3
Вам поможет функция ввода с эхом getche()
1
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
18.01.2012, 19:39 4
Цитата Сообщение от Vergil111 Посмотреть сообщение
ам поможет функция ввода с эхом getche()
Это не стандартная функция. Уже лучше getch (), зачем эхо.

Цитата Сообщение от fenix117 Посмотреть сообщение
клавиши "вправо" или "влево"
Только не перемешивайте с cin, метод буферизации у них разный.
Вообщем почитайте, может то что ищете http://ru.wikipedia.org/wiki/Conio.h
1
199 / 142 / 57
Регистрация: 06.07.2011
Сообщений: 300
18.01.2012, 19:39 5
используйте getch();
1
31 / 31 / 16
Регистрация: 30.11.2010
Сообщений: 81
18.01.2012, 19:44 6
go, почему нестандартная? вся разница между getch() и getche() в том, что у первой нету эха, а у второй есть. в любом случае придется подключать заголовочный файл <conio.h>. А выбор конкретной функции уже зависит от того, понадобится ли
fenix117, вывод информации о том, какая клавиша была нажата или нет
1
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
18.01.2012, 19:47 7
Цитата Сообщение от Vergil111 Посмотреть сообщение
почему нестандартная?
Потому что читать надо, я даже ссылку привел.
Почему
Цитата Сообщение от Вики
conio.h (от англ. console input-output — консольный ввод-вывод) — заголовочный файл, используемый в старых компиляторах, работающих в операционных системах MS-DOS, для создания текстового интерфейса пользователя. Тем не менее, он не является частью языка программирования Си, стандартной библиотеки языка Си, ISO C или требуемой стандартом POSIX.
Большинство компиляторов языка Си, предназначенных для UNIX и Linux, не имеют этого файла и не обеспечивают сопутствующих библиотечных функций.
1
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
18.01.2012, 20:13 8
Что-то я понять не могу, так у тебя что за программа-то? Если консольная, это один вопрос, если оконая, то другой вопрос. Во втором случае надо послать окну программы сообщение, на которое она должна определённым образом реагировать.
1
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
18.01.2012, 23:04 9
не пробовали использовать stdio, отключив буферизацию?
C++
1
setvbuf(stdin , NULL , _IOFBF , 0);
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
19.01.2012, 11:56 10
Цитата Сообщение от retmas Посмотреть сообщение
не пробовали использовать stdio, отключив буферизацию?
Это несколько грубовато.
Цитата Сообщение от fenix117 Посмотреть сообщение
мне необходимо именно без enter.
Зачем оно Вам?
0
8 / 8 / 2
Регистрация: 16.03.2011
Сообщений: 257
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), моргает и остается на той же строчке с теми же локальными переменными. В чем проблема?
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
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' );
1
8 / 8 / 2
Регистрация: 16.03.2011
Сообщений: 257
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) с предусловием и заработало.
0
19.01.2012, 16:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.01.2012, 16:25
Помогаю со студенческими работами здесь

Обработка нажатия клавиш (Win32 Console Application)
товарищи,помогите нубу!надо написать прогу в консоли на visual studio на c++.Сама прога то простая...

Потоки:обработка нажатия клавиш; вычисления,прорисовка
Доброго времени суток,господа! Делаю курсовую - игру &quot;змейка&quot;,тема изъезженная,да и не об этом...

Нажатия клавиш
В mfc нужно чтобы при нажатии клавиш, происходило действие. С помощью WM_KEYDOWN, пытался сделать,...

Нереагирование на нажатия клавиш
Как можно сделать чтобы после запуска файла, нельзя было ничего нажимать на клавиатуре, двигать...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru