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

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

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

Студворк — интернет-сервис помощи студентам
Добрый вечер, я делаю пошаговую демонстрационную программу различных методов сортировок в консоли, но не знаю как сделать так, чтобы при нажатии клавиши "вправо" или "влево"(без "enter"!!!) показывался следующий или предыдущий слайд, подскажите пожалуйста. Просто кроме "cin >> .." и "getline(cin, ..)" я не знаю как получить информацию с клавы, мне необходимо именно без enter.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.01.2012, 19:19
Ответы с готовыми решениями:

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

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

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

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

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

Добавлено через 1 час 49 минут
Уфф Разобрался) Правда не понял в чем была проблема. Просто сделал while (t != 48) с предусловием и заработало.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.01.2012, 16:25
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru