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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.66
fenix117
8 / 8 / 1
Регистрация: 16.03.2011
Сообщений: 249
#1

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

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

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

Не обрабатываются нажатия клавиш стрелок - C++
почему при нажатии "СТРЕЛКА ВВЕРХ" или "СТРЕЛКА ВНИЗ" условие не выполняется?? ведь коды клавиш 72 и 80? unsigned char a=getch(); ...

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

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

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

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

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

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

Цитата Сообщение от fenix117 Посмотреть сообщение
клавиши "вправо" или "влево"
Только не перемешивайте с cin, метод буферизации у них разный.
Вообщем почитайте, может то что ищете http://ru.wikipedia.org/wiki/Conio.h
1
Serejke_qq
150 / 108 / 9
Регистрация: 06.07.2011
Сообщений: 224
Завершенные тесты: 2
18.01.2012, 19:39 #5
используйте getch();
1
Vergil111
31 / 31 / 6
Регистрация: 30.11.2010
Сообщений: 81
18.01.2012, 19:44 #6
go, почему нестандартная? вся разница между getch() и getche() в том, что у первой нету эха, а у второй есть. в любом случае придется подключать заголовочный файл <conio.h>. А выбор конкретной функции уже зависит от того, понадобится ли
fenix117, вывод информации о том, какая клавиша была нажата или нет
1
go
Эксперт C++
3586 / 1366 / 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, не имеют этого файла и не обеспечивают сопутствующих библиотечных функций.
1
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,460
18.01.2012, 20:13 #8
Что-то я понять не могу, так у тебя что за программа-то? Если консольная, это один вопрос, если оконая, то другой вопрос. Во втором случае надо послать окну программы сообщение, на которое она должна определённым образом реагировать.
1
retmas
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
18.01.2012, 23:04 #9
не пробовали использовать stdio, отключив буферизацию?
C++
1
setvbuf(stdin , NULL , _IOFBF , 0);
0
fasked
Эксперт С++
4937 / 2517 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.01.2012, 11:56 #10
Цитата Сообщение от retmas Посмотреть сообщение
не пробовали использовать stdio, отключив буферизацию?
Это несколько грубовато.
Цитата Сообщение от fenix117 Посмотреть сообщение
мне необходимо именно без enter.
Зачем оно Вам?
0
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), моргает и остается на той же строчке с теми же локальными переменными. В чем проблема?
0
go
Эксперт C++
3586 / 1366 / 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' );
1
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) с предусловием и заработало.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2012, 16:25
Привет! Вот еще темы с ответами:

Отлов нажатия клавиш - C++
Доброго времени суток! Стоит задача при нажатии оперделенной клавиши выполнить действие. Код: #include &lt;windows.h&gt; #include...

Имитация нажатия клавиш С/С++ - C++
Задача такая: Программа должна имитировать нажатие клавиш в фоновом режиме. То-есть она должна нажимать заранее заданные кнопки(кнопку),...

Обработчик нажатия клавиш - C++
Хочу написать обработчик нажатия клавиш. А именно чтобы после запуска приложения консольное окно сворачивалось и программа считывала все...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.01.2012, 16:25
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru