我正在设计一个主机游戏,我遇到了一个问题,我需要有一种保证暂停程序的方法。通常,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
缓冲区会为您解决问题?