检查istream中是否有待处理数据的简单方法

Easy way to check whether there is data pending in istream

提问人:bartop 提问时间:10/8/2020 最后编辑:Zig Razorbartop 更新时间:10/8/2020 访问量:608

问:

是否有任何标准的非读取方法来检查输入流中是否有任何待处理的字符?我总是可以尝试这样的事情

char buffer[256];
std::cin.get(buffer, 256, '\n');
if (!std::cin.fail()) {
// use buffer
}

但它谴责我玩 ios 标志,使用 C 字符串等等。难道没有更简单、更干净的方法可以做到这一点吗?喜欢这个:

if (std::cin.has_data()) {
    std::string data;
    std::getline(std::cin, data);
    // do my stuff
} 
C++ IO IO流

评论


答:

3赞 Zig Razor 10/8/2020 #1

函数 peek 是解决方案。

正如 cpppreference 所说:

如果 good() == true,则返回由 rdbuf()->sgetc()

否则,返回 Traits::eof()。