📜  如何阅读直到 eof-from-cin-in-c++ (1)

📅  最后修改于: 2023-12-03 15:09:17.784000             🧑  作者: Mango

如何阅读直到 eof-from-cin-in-c++

在 C++ 中,我们通常使用 std::cin 来从标准输入读取用户的输入。当我们读取用户的输入时,很有可能会遇到 EOF(也就是 end-of-file)信号。EOF 表示一个输入流已经被读取到了末尾,无法再继续读取,而在 C++ 中,EOF 被定义为-1。

由于输入的长度很难事先确定,因此在许多情况下,我们需要一种能够一直读取输入直到 eof 的方法。那么如何实现这种方法呢?请看以下示例代码:

#include <iostream>
#include <string>

int main()
{
    std::string line;
    while (std::getline(std::cin, line))
    {
        //do something with line
    }
    return 0;
}

在这个示例中,我们首先定义了一个 std::string 类型的变量 line ,然后通过 std::getline() 函数从输入流中读取一行数据存入 line 中。接下来,我们通过一个 while 循环来不断调用 std::getline() 函数,直到返回值为 false,也就是读取到输入的末尾。在 while 循环中,我们可以对每一行的输入做出相应的处理。

另外,要注意的是,如果输入流的末尾出现在一行的开始处,那么上面的 while 循环会跳过这一行。为了避免这种情况,我们可以使用 std::cin.eof() 函数来检查输入流是否读取到了末尾,如下所示:

#include <iostream>
#include <string>

int main()
{
    std::string line;
    while (std::getline(std::cin, line) || std::cin.eof())
    {
        if (!line.empty())
        {
            //do something with line
        }
    }
    return 0;
}

在这个示例中,我们为 std::getline() 函数添加了一个或操作符,这个或操作符表示如果 std::getline() 函数返回 false,即读取到了输入流的末尾,就可以执行循环中的语句块了。此外,我们还添加了一个 if 语句,用于处理输入流的末尾出现在一行的开始处的情况。

总结一下,我们可以通过上述方法实现在 C++ 中读取输入直到 eof 的操作。不管输入的长度有多长,这种方法都可以在读取到输入流的末尾时自动停止。