我正在编写一个基于文本的游戏,其中通过在每个角色之间休眠几毫秒来打印到终端的消息,然后输入从播放器中获取,如下所示:
#include <iostream>
#include <unistd.h>
#include <climits>
int main() {
std::string line;
std::string message = "LotsAndLotsAndLotsAndLotsAndLotsAndLotsAndLotsAndLotsAndLotsAndLotsAndLotsAndLotsAndLotsAndLotsAndLotsAndLotsOfText\n";
for(char c : message) {
usleep(1000 * 40);
std::cout << c << std::flush;
}
std::getline(std::cin, line);
std::cout << line << "\n";
return 0;
}
问题在于,如果玩家在打印消息时输入任何内容,getline会将其取出。
我不能使用cin.ignore,因为我不知道玩家在等待消息时可能输入多少个字符或哪种类型的字符。有办法解决这个问题吗?
答案 0 :(得分:0)
这部分是一个推测性答案,因为我实际上没有测试过这个。有可能创建一个循环来阻止代码的其他部分执行,直到循环完成,此循环运行直到您完成消息。这个循环将使用参数/标志,例如eof或者(我忘记,如果这实际上是可能的)类似于行尾消息。同时,您可以使用于获取输入的代码成为单独方法的一部分,因此只有在您希望调用它时才调用该方法。