用按键打破循环

时间:2011-08-10 15:03:52

标签: c++ break conio

我正在编写一个Win32 GUI应用程序,它有一个循环,我想只在按键时才重启。主循环已经在运行,我不能简单地重新启动它,所以我必须插入一个“挂起”点,用户可以手动突破。下面的代码表示我在主循环结束时放置的内容。它应该通过将程序放入一个无限的子循环来暂停程序,只有在按下字母'q'时才能打破它。

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

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

这成功地使程序挂起,但按'q'不会结束循环。我理解使用cin.ignore()或cin.get()会更好,但出于某些原因,当我将iostream添加到标题列表时,我得到了一堆错误,所以我目前正在尝试使用_getch( )使用conio.h标题。

任何帮助都非常感激。

4 个答案:

答案 0 :(得分:2)

您只需致电MessageBox

答案 1 :(得分:1)

很难从你的问题中判断出来,但是如果他们希望继续,那么听起来你试图在循环的每次迭代后提示用户。我假设无限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
   }
}

VS

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

您还会注意到,由于_getch()返回char,您只需测试函数的返回代码(除非您需要存储输入以供以后使用)。

答案 2 :(得分:0)

您必须创建一个消息循环并等待keydown消息到达。 Try to check this example

在Windows GUI应用程序中,没有输入可从控制台读取。

答案 3 :(得分:0)

您提到这是一个Win32 GUI应用程序。在进入循环时,您是否创建了可能具有输入焦点的任何Windows?如果是,您应该尝试捕获WM_KEYDOWN / WM_KEYUP消息。如果是控制台应用程序,请特别注意 Console Functions ReadConsole

萨姆