所以,我想做的是在 C++ 中创建一个函数,允许用户在一定时间内将任何内容输入字符串(例如,十分钟(甚至一个))(并保留他们输入的所有内容,顺便说一句。我正在尝试设计一款游戏来帮助 NaNoWriMo 参与者或一般作者插入他们写作,因此保留所有内容是必不可少的)< strong>然后不允许再附加输入。一开始这听起来很容易,但五个小时的谷歌搜索证明并非如此。
首先,我认为我可以重复追加直到时间用完或其他什么。观察:
int main() //testing
{
string str;
string app = " ";
getline(cin, app);
for (int i = 0; i <= 3; i++)
{
Sleep(5000);
cout << i << endl;
str = " ";
getline(cin, str);
app.append(str);
}
cout << app;
}
但后来我意识到,duh,在用户按下 enter 之前,循环不会再次检查条件。麻烦。与我对角色的巧妙构想相同。我需要一个循环,它随着每个输入的字符(或过去的每一秒)而更新,无论用户输入另一个字符需要多长时间。
然后我想,“好吧,在每个空间停下来更新时间应该就足够了,是吗?”
这是我开始发现 C++ 在解析字符串或读取输入时表现不佳的时候。我考虑过追加每个字符,,因为这样很容易找到一个空格,但它仍然等待用户。
沮丧,我想知道是否有一种方法可以让程序在获取用户输入的同时运行,以便一旦时间用完(使用 time(null)、时间流逝、 time(null) 和减去两个变量以获得经过的秒数)。
事实证明,有! (考虑到所有使用此原理的计算机程序和游戏,我知道必须存在,但我对编程还很陌生(上周三我学习了函数,给你一个想法),所以我不知道什么。)
我偶然发现的第一个函数是 curses 和 ncurses,但我很快发现这对于我想做的事情来说真的不是一个可行的选择(因为我听说它会做一些很有趣的事情)。
然后 我偶然发现了 kbhit,它可以识别何时按下键盘上的键。 This blog看起来很有前途,可能也是我想做的,但我不确定它是用什么语言写的。 . .我所知道的是它不能很好地与我的 C++ IDE 配合使用。我不知道如何让它与 C++ 兼容。
所以,重申一下我想要的:
包含同时执行时间计数器和用户输入(对字符串),但在时间用完时终止(停止让用户进一步输入字符串)的循环。 (所有这些都没有对我的程序的其余部分做任何有趣的事情,就像 ncurses 那样。)
另外:我运行 Windows 8(我存在的祸根),我使用 Code::Blocks 作为我的 IDE。
或者,如果您知道了,这个问题已经在某个地方得到了回答。那实际上会很棒。找不到它只会让我觉得很傻。
(以下是我一路上看过的一些地方:
User input while program still running
How do I read input from standard input until a space or a tab is pressed?
Capture characters from standard input without waiting for enter to be pressed )
(我正在尝试创建的游戏,(还不是很远;我昨晚就开始了),以防你好奇:https://github.com/Rowan-Law/Dungeon-Crawl/blob/master/Source%20Code)
最佳答案
你可能想为时间创建一个线程,然后不断更新字符串直到时间线程返回
关于c++ - 如何在 C++ 中创建一个运行时间计数器并允许用户同时输入的循环(非阻塞用户输入),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28655833/