【发布时间】:2014-06-09 11:53:47
【问题描述】:
我有一个 C++ 程序,它接收来自std::cin 上的用户的输入。在某些时候,它需要调用一个函数来打开一个用户可以与之交互的 GUI 窗口。当此窗口打开时,我的应用程序被阻止。我注意到,如果用户在另一个窗口打开时在我的应用程序窗口中键入任何内容,则不会立即发生任何事情,但是当控制权返回到我的应用程序时,这些击键都会立即生效。这是不可取的。我希望在阻止应用程序时输入的所有击键都被忽略;或者,在应用程序重新获得控制权时将它们全部丢弃,但保留对之后发生的击键做出反应的能力。
Stack Overflow 上有各种问题解释了如何清除一行输入,但据我所知,他们倾向于假设“不需要的输入只持续到下一个换行符”之类的东西。在这种情况下,情况可能并非如此,因为用户可能会在应用程序被阻止时多次按 Enter。我尝试了多种方法(getline(),get(),readsome(),...),但它们通常似乎无法检测到 cin 何时暂时耗尽。相反,它们等待用户继续为 cin 提供内容。例如,如果我使用cin.ignore(n),那么不仅在打开 GUI 窗口时输入的所有内容都会被忽略,而且程序会在用户输入内容时一直等待,直到总共输入了 n 字符。这不是我想要的 - 我想根据字符出现的位置来忽略字符在时间中,而不是在输入流中它们出现的位置。
“用尽 cin 中的所有东西现在,然后停止寻找更多东西”的成语是什么?我不知道要搜索什么来解决这个问题。
我看到this question,可能类似并且有答案,但答案要求使用<termios.h>,这在Windows 上不可用。
【问题讨论】:
-
这是一个 XY 问题。解决真正的问题,不要让你的控制台像这样紧张。启动一个线程并让它显示窗口。