首页 > 解决方案 > 如何让 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")的存在,但它(在我看来)不是一个好的解决方案,我不想使用它。

标签: c++inputconsole-application

解决方案


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

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


推荐阅读