如何使 std::istream 从键盘获取输入(如 std::cin)?



我正在设计一个主机游戏,我遇到了一个问题,我需要有一种保证暂停程序的方法。通常,std::cin.get()是可以接受的,但我已经在将std::cin用于各种输入任务,因此流可能不清晰,导致cin.get()不暂停程序。

我认为,由于std::cin只是一个std::istream,我应该能够创建一个不受用户输入"污染"的自定义std::istream。当然,问题是该解决方案不起作用。具体来说,这是该函数的代码:

inline void pause()
{
std::stringbuf strm_buf;
std::istream pause_strm(&strm_buf);
pause_strm.get();  // I figured this would work since the stream is guarenteed to be empty
}

在调试中查看,pause_strm.get()只是返回-1

作为参考,我使用的是VS2019。我需要这个暂停功能,因为我还有一个cls()函数(使用预处理器语句来找出操作系统(。请注意,我完全知道system("pause")存在,但它(在我看来(不是一个好的解决方案,我不想使用它。

在评论中,我描述了为什么您的解决方案没有按预期工作。

您说不能使用std::cin::get(),因为您已经在使用它来获取一些输入,因此std::cin缓冲区可能是非空的。因此,也许只是使用类似std::cin.clear();的东西清除std::cin缓冲区会为您解决问题?

最新更新