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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
alternknwn
0 / 0 / 0
Регистрация: 02.06.2011
Сообщений: 7
#1

Прерывание бесконечного цикла с возвратом значения нажатой клавиши в main() - C++

23.03.2012, 20:10. Просмотров 2047. Ответов 6
Метки нет (Все метки)

Вкратце, в функции main() есть некий объект класса - scene, также есть бесконечно работающий цикл while(1), в котором вызывается функция-член типа char того же класса: char ch=scene.start(), она должна возвращать значение нажатой клавиши, для дальнейшей работы с этим значением в операторе switch().
Тело функции char THandler::start() тоже должно содержать бесконечно работающий цикл:
C++
1
2
3
4
5
6
7
8
9
10
char THandler::start()
{
  for (int i=objy; ; i++)
  {
     Sleep(1000);
     system("cls");
     MoveObj(Direction);
     PaintData();
  }
}
Вопрос: как можно организовать прерывание цикла нажатием предусмотренной(желательно) клавиши внутри бесконечно работающей функции с передачей значения нажатой клавиши в main()?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2012, 20:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Прерывание бесконечного цикла с возвратом значения нажатой клавиши в main() (C++):

Возврат значения нажатой клавиши - C++
Подскажите ассемблеровскую вставку для С++. Чтобы возвращалось значение нажатой клавиши

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

Старый борланд: как выйти из бесконечного цикла по нажатию заданной клавиши? - C++
Короче нужно сделать прогу которая считает сколько отрицательных,положительных,равных 0 ввел пользователь. Реализовал.Пользователь вводит...

прога, которая по нажатой клавише выводит ascii - код символа это клавиши или scan - код самой клавиши. - C++
написать программу, которая по нажатой клавише выводит ascii - код символа этой клавиши или scan - код самой клавиши. осуществите вывод в...

Считывание нажатой клавиши - C++
Задача состоит в том, что бы при нажатии какой-либо клавиши производилось действие, в паскале я знаю как это сделать, при помощи процедуры...

Определить код нажатой клавиши - C++
Есть ли альтернатива для команды getch() в Visual C++ 2008??? А то нигде найти не могу Добавлено через 38 секунд А то getch() в...

6
NightCoder89
12 / 12 / 1
Регистрация: 22.03.2012
Сообщений: 42
23.03.2012, 21:10 #2
К примеру, так:

Код
char cMyChar = getchar(); // в переменной cMyChar хранятся нажатые клавиши
if(cMyChar == 'w') // если нажали w, то цикл остановлен
   break;
0
Deryck
5 / 5 / 0
Регистрация: 01.12.2010
Сообщений: 109
23.03.2012, 21:31 #3
Цитата Сообщение от NightCoder89 Посмотреть сообщение
К примеру, так:
лично у меня такой код требует еще нажатие enter после клавиши
0
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
23.03.2012, 21:32 #4
kbhit()
0
alternknwn
0 / 0 / 0
Регистрация: 02.06.2011
Сообщений: 7
23.03.2012, 22:08  [ТС] #5
Цитата Сообщение от Deryck Посмотреть сообщение
лично у меня такой код требует еще нажатие enter после клавиши
верно, поэтому такой вариант не подходит для непрерывной работы программы, которая управляет данными по таймеру в зависимости от нажатых клавиш.
скажем, в цикле while(1) использовался:
C++
1
2
3
4
char ch;
ch=_getch();
if(!ch) ch=_getch();
switch(ch){}
но такой код не позволяет обрабатывать паралельно 2й непрерывно работающий цикл, вызываемый до, или после выполнения switch(), потому что просто ждет нажатия клавиши, и не дает возможности продолжить работу программы, пока не нажата клавиша.
Поэтому в main() вызывается scene.start() в бесконечном цикле while(1), а из неё передается код для вызова определенных методов в switch(), который в свою очередь обрабатывает данные и на 2м шаге опять вызывает scene.start()...

Цитата Сообщение от panicwassano Посмотреть сообщение
kbhit()
kbhit() возвращает не ноль в случае нажатия клавиши клавиатуры и ноль в противном случае, а надо char или (int)char.
0
alternknwn
0 / 0 / 0
Регистрация: 02.06.2011
Сообщений: 7
24.03.2012, 02:23  [ТС] #6
В общем после небольших экспериментов, получилось что-то более-менее приемлемое с частотой обновления кадров ~20/сек...
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
41
42
43
class THandler
{
   ...
   int cycles;
public:
   char start();  // в конструкторе cycles=0; накапливает количество пройденых "фреймов".
   ...
};
 
char THandler::start()
{
   char ch;
   BYTE t=1;
   fflush(stdin);
   do {
      Sleep((DWORD)t*50);       // 50ms задержка
      if ((cycles%20)==0)         // каждую секунду вызов функций
      {
         system("cls");
         MoveObj(Direction);
         PaintData();
      }
      cycles++;
   } while (!(_kbhit()));
   ch=_getch();                    // берет символ из stdin
   return ch;
}
 
int main()
{
   THandler scene;
   ...
   while(1)
   {
      ch=scene.start();
      switch(ch)
      {
         ...
      }
   }
   ...
   return 0;
}
0
SergVSD
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 10
31.03.2016, 05:21 #7
Сработало как часики большое спасибо
0
31.03.2016, 05:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2016, 05:21
Привет! Вот еще темы с ответами:

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

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

Определение нажатой клавиши,консольное приложение. - C++
Здравствуйте,есть программка которая при нажатии на одну из стрелок клавиатуры должна написать какая стрелка нажата: #include...

Прерывание цикла! - C++
каким образом можно прервать while путем ввода какого нибудь символа, чтобы не нужно было при каждом проходе тела цикла вводить этот...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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