Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/64: Рейтинг темы: голосов - 64, средняя оценка - 4.77
0 / 0 / 1
Регистрация: 18.07.2015
Сообщений: 12

Проверка, нажата клавиша или нет, без остановки работы цикла

19.07.2015, 13:47. Показов 13025. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
нужна функция которая будет проверять нажата клавиша или нет, при этом она не должна останавливать работу цикла
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.07.2015, 13:47
Ответы с готовыми решениями:

Как проверять, нажата ли клавиша Esc, в каждой итерации цикла, и если нажата, то прервать выполнение цикла?
OwenGlendower, это обращение прежде всего к вам. Вызов функции, в которой происходит проверка методом...

Выход из цикла без остановки его работы
Дан код, при выполнение работы он ожидает нажатие клавиши. Я хочу узнать, как сделать так, чтобы при работе он не ожидал нажатия клавиши, а...

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

9
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
19.07.2015, 14:03
if(kbhit())
0
0 / 0 / 1
Регистрация: 18.07.2015
Сообщений: 12
19.07.2015, 15:07  [ТС]
khbit у меня как-то криво работает. приходится достаточно долго жать на клавишу. и при этом когда она срабатывает то консоль моментально закрывается, хотя я прописал system("pause")
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
19.07.2015, 16:30
Цитата Сообщение от Владимир12385 Посмотреть сообщение
khbit у меня как-то криво работает.
Пример в студию. Если у тебя итерация цикла выполняется долго, то и условие сработает не скоро.
0
0 / 0 / 1
Регистрация: 18.07.2015
Сообщений: 12
19.07.2015, 18:11  [ТС]
C++
1
2
3
4
5
6
7
while(1)
{
i++
if(khbit())
breack;
}
}
Добавлено через 1 минуту
а как сделать с помощью этой функции чтобы при нажатии на определенную клавишу выключало? а на другую допустим на паузу ставило?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
19.07.2015, 20:30
Цитата Сообщение от Владимир12385 Посмотреть сообщение
а как сделать с помощью
Можно вот так:
C++
1
2
3
4
5
6
7
if (kbhit()) {
  char ch = getch();
  switch(ch) {
  case 'P'; \\ пауза
    break;
  }
}
0
0 / 0 / 1
Регистрация: 18.07.2015
Сообщений: 12
20.07.2015, 10:34  [ТС]
Подскажите пожалуйста какая функция будет делать тоже самое что и kbhit() но на unix платформе
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
20.07.2015, 11:52
Цитата Сообщение от Владимир12385 Посмотреть сообщение
Подскажите пожалуйста какая функция будет делать тоже самое что и kbhit() но на unix платформе
Есть два варианта.
1) В библиотеке ncurses есть функция getch(). Её можно сделать неблокируемой через nodelay(), затем, если нужно вызвать ungetch()
Пример нашел в инете
C
1
2
3
4
5
6
7
8
9
10
11
int kbhit(void)
{
    int ch = getch();
 
    if (ch != ERR) {
        ungetch(ch);
        return 1;
    } else {
        return 0;
    }
}
2. Можно и без ncurses. Пример тоже когда-то скопипастил.
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
int kbhit(void)
{
  struct termios oldt, newt;
  int ch;
  int oldf;
 
  tcgetattr(STDIN_FILENO, &oldt);
  newt = oldt;
  newt.c_lflag &= ~(ICANON | ECHO);
  tcsetattr(STDIN_FILENO, TCSANOW, &newt);
  oldf = fcntl(STDIN_FILENO, F_GETFL, 0);
  fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);
 
  ch = getchar();
 
  tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
  fcntl(STDIN_FILENO, F_SETFL, oldf);
 
  if(ch != EOF)
  {
    ungetc(ch, stdin);
    return 1;
  }
 
  return 0;
}
ИМХО, в чистой консоли такие вещи ни к чему. А в граф тулкитах, как и в curses, есть свои средства.
1
0 / 0 / 1
Регистрация: 18.07.2015
Сообщений: 12
20.07.2015, 13:51  [ТС]
А где в первом варианте ставить nodelsy
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
20.07.2015, 14:46
Цитата Сообщение от Владимир12385 Посмотреть сообщение
А где в первом варианте ставить nodelsy
В основной программе перед циклом с вызовом проверки, очевидно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.07.2015, 14:46
Помогаю со студенческими работами здесь

Проверить нажата ли клавиша F1 без использования GetKeyState и GetAsyncKeyState
Возможно ли проверить нажатие клавиши F1 другими методами? char e = { VK_F1 }; if (strcmp(e, "VK_F1") == 0) { ...

Нажата или отпущена конкретная клавиша С++
Доброго времени суток. Столкнулся с такой проблемой: на клавиатуре нажимается клавиша. Нужно определить что за клавиша нажата, и как долго....

ADC->DMA->SDIO (или NAND через FSMC) без остановки в обработчике прерываний DMA на STM32F407VG, реально или нет?
Добрый день. Столкнулся с необходимостью писать большой объём данных АЦП с высокой скоростью. Каналов 8. Частота АЦП максимальная. ...

Определить, какая клавиша Shift нажата: левая или правая
Уважаемые программисты нужна ваша помощь в написании программы. Она должна выводить сообщение о том какая клавиша Shift нажата: левая или...

Как узнать, нажата ли сейчас клавиша ctrl, alt или winkey?
Я сделал программу, которая набирает текст, введенный в эту программу, эмитируя нажатия на клавиатуре (для копипаста туда, где копипаст не...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 01.04.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru