我正在编写一个Win32 GUI应用程序,它有一个循环,我想只在按键时才重启。主循环已经在运行,我不能简单地重新启动它,所以我必须插入一个“挂起”点,用户可以手动突破。下面的代码表示我在主循环结束时放置的内容。它应该通过将程序放入一个无限的子循环来暂停程序,只有在按下字母'q'时才能打破它。
for (;;)
{
char temp;
temp = _getch();
if (temp == 'q')
{
break;
}
}
这成功地使程序挂起,但按'q'不会结束循环。我理解使用cin.ignore()或cin.get()会更好,但出于某些原因,当我将iostream添加到标题列表时,我得到了一堆错误,所以我目前正在尝试使用_getch( )使用conio.h标题。
任何帮助都非常感激。
答案 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 。
萨姆