【发布时间】:2015-09-09 11:06:02
【问题描述】:
我正在编写一个基于文本的游戏,其中通过在每个字符之间休眠几毫秒来打印到终端的消息,然后像这样从玩家那里获取输入:
#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,因为我不知道玩家在等待消息时可能会输入多少个字符或什么类型的字符。有没有办法解决这个问题?
【问题讨论】:
-
cin就是这样。您需要使用特定于平台的输入 API 来阻止或被输入打断。 -
也许您可以定义一个标志,在打印消息时,您应该通过从缓冲区中删除信息来忽略您阅读的所有内容。
-
如果您需要高级终端操作(阻止用户输入、在任意位置输出...),ncurses 可能是一个不错的选择。
-
消息是从单独的文件中读取的吗?这可能是有用的信息。