C++ 用按键打破一个循环

C++ 用按键打破一个循环,c++,break,conio,C++,Break,Conio,我正在编写一个Win32 GUI应用程序,它有一个循环,我只想在按下键时重新启动。主循环已经在运行,我不能简单地重新启动它,所以我必须插入一个用户可以手动突破的“挂起”点。下面的代码代表了我在主循环末尾的内容。它应该通过将程序放入一个无休止的子循环来暂停程序,只有在按下字母“q”时才能中断该子循环 for (;;) { char temp; temp = _getch(); if (temp == 'q') { break; } } 这成功地使程序挂起,但按“q”键无法

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

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

 if (temp == 'q')
  {
  break;
  }
 }
这成功地使程序挂起,但按“q”键无法结束循环。我知道最好使用cin.ignore()或cin.get(),但由于某些原因,当我将iostream添加到标题列表时,会出现一系列错误,因此我目前正尝试使用带有conio.h标题的_getch()来完成此操作


非常感谢您的帮助。

您必须创建一个消息循环,并等待一条按键消息到达


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

您必须创建一个消息循环,并等待一个keydown消息到达


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

你可以直接调用
MessageBox

你可以直接调用
MessageBox

很难从你的问题中分辨出来,但听起来你好像在尝试在循环的每次迭代后提示用户是否希望继续。我假设无限
for
循环位于主处理循环的末尾

您不需要无限循环:
\u 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


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

很难从您的问题中分辨出来,但听起来好像您试图在循环的每次迭代后提示用户是否希望继续。我假设无限
for
循环位于主处理循环的末尾

您不需要无限循环:
\u 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


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

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


Sam

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


Sam

if(temp=='q')
会让你的代码更具可读性。我只是好奇,但是你从标题中得到了什么错误?你确定你的程序达到了这个循环吗?您验证过吗?执行无限循环不是“暂停”程序的正确策略,除非您想测试风扇的速度。@MGZero,这些是我在添加iostream:1>c:\program files\microsoft visual studio 10.0\vc\include\cmath(19)时遇到的几个错误:错误C2061:语法错误:标识符“acosf”1>c:\program files\microsoft visual studio 10.0\vc\include\cmath(19):错误C2059:语法错误:';'
if(temp=='q')
会让你的代码更具可读性。很好奇,但是你从标题中得到了什么错误?你确定你的程序达到了这个循环吗?您验证过吗?执行无限循环不是“暂停”程序的正确策略,除非您想测试风扇的速度。@MGZero,这些是我在添加iostream:1>c:\program files\microsoft visual studio 10.0\vc\include\cmath(19)时遇到的几个错误:错误C2061:语法错误:标识符“acosf”1>c:\program files\microsoft visual studio 10.0\vc\include\cmath(19):错误C2059:语法错误:';'天才!谢谢,将尝试使用此选项,而不是直接签入(此处为noob)-messagebox是否会暂停我的主程序?
messagebox
是模态的,因此它将阻止调用它的线程,直到用户选择一个选项或关闭窗口。谢谢。在这种情况下,这一点非常有效。程序挂起,直到我按Enter键,程序才暂停。天才!谢谢,将尝试使用此选项,而不是直接签入(此处为noob)-messagebox是否会暂停我的主程序?
messagebox
是模态的,因此它将阻止调用它的线程,直到用户选择一个选项或关闭窗口。谢谢。在这种情况下,这一点非常有效。程序挂起,直到我按Enter键,程序才会暂停。