Выход из цикла нажатием клавиши

Я пишу приложение с графическим интерфейсом Win32, которое имеет цикл, который я хотел бы перезапустить только после нажатия клавиши. Основной цикл уже запущен, и я не могу просто перезапустить его, поэтому мне нужно вставить точку "зависания", из которой пользователь может вручную вырваться. Код ниже представляет то, что я положил в конце моего основного цикла. Предполагается, что программа будет приостановлена, поместив ее в бесконечный цикл, который может быть прерван только при нажатии буквы "q".

for (;;)
 {
 char temp;
 temp = _getch();

 if (temp == 'q')
  {
  break;
  }
 }

Это успешно приводит к зависанию программы, но нажатие клавиши "q" ничего не делает для завершения цикла. Я понимаю, что использование cin.ignore() или cin.get() было бы предпочтительным, но по какой-то причине, когда я добавляю iostream в список заголовков, я получаю кучу ошибок, поэтому в настоящее время я пытаюсь сделать это с помощью _getch() с заголовком conio.h

Любая помощь высоко ценится.

4 ответа

Решение

Вы можете просто позвонить MessageBox,

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

Вам не нужен бесконечный цикл: _getch() все равно остановит выполнение, пока не будет нажата клавиша. По правде говоря, тот факт, что вы завернули свое условное в for петля является причиной того, что break не ведет себя так, как вы хотите - вы breakвыход из бесконечного цикла, но не вашего основного цикла обработки.

Пример:

while(1)
{
   // Do some processing
   for (;;)
   {
      char temp;
      temp = _getch();

      if (temp == 'q')
         break;   // This will break out of the for and continue the while
   }
}

против

while(1)
{
   // Do some processing
   if ('q' == _getch())
      break;             // This will break out of the while
}

Вы также заметите, что, поскольку _getch() возвращает char, вы можете просто проверить код возврата функции (если вам не нужно сохранять входные данные для последующего использования).

Вы должны создать цикл обработки сообщений и подождать, пока не придет сообщение о нажатии клавиши. Попробуйте проверить этот пример.

В приложении с графическим интерфейсом Windows нет ввода для чтения из консоли.

Вы упомянули, что это приложение Win32 GUI. Во время входа в цикл вы создали Windows, которая может иметь фокус ввода? Если да, попробуйте перехватить сообщения WM_KEYDOWN/ WM_KEYUP. Если это консольное приложение, обратите внимание на функции консоли, особенно ReadConsole.

Сэм

Другие вопросы по тегам