0

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

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

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

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

非常感谢任何帮助。

4

4 回答 4

2

你可以打电话MessageBox

于 2011-08-10T15:13:51.367 回答
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
   }
}

对比

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

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

于 2011-08-10T15:15:02.003 回答
0

您必须创建一个消息循环并等待 keydown 消息到达。试着检查这个例子

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

于 2011-08-10T15:12:23.297 回答
0

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

山姆

于 2011-08-10T15:27:37.383 回答