c++ - 如何让 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
所以也许只是使用类似的东西清除缓冲区std::cin.clear();
会对你有用吗?