如何检查i / ostream是否为空?

时间:2015-10-02 17:17:01

标签: c++ c++11

我正在尝试编写一个暂停我的控制台的简单函数。

很简单,但我希望它能在两种情况下都有效:当流为空时,只需使用std::cin.get();std::getchar();;当流不为空时,如果您在程序过程中输入了任何内容,则必须使用std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::cin.get();;

所以,我想写一个函数,如果可能的话,用一个简单的if语句来处理它们。不幸的是,我对C ++ streams非常不满意。我希望在该领域有更多知识的人可以帮助或指出我错过的明显功能。谢谢!

#include <iostream>
#include <limits>

void pause()
{
    if (std::cin.eof()) //I don't know what I'm doing here. Don't judge, lol
    {
        std::cin.get();
    }
    else
    {
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        std::cin.get();
    }
}

int main()
{
    int i = 0;
    std::cin >> i;          //if I comment this line, I would have to press enter twice
    std::cout << "Hello world!";                         //to close the console
    pause();
}

1 个答案:

答案 0 :(得分:0)

void pause()
{
    if (std::cin.rdbuf()->in_avail > 0)
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    std::cin.get();
}