如何使用>>停止阅读什么时候没有剩下的字了

时间:2014-01-03 18:24:40

标签: c++

我在文本文件中给出了一个单词列表,全部由换行符分隔。使用fstream和>>读取它们,而不知道有多少单词。如何告诉程序何时停止?我已经测试了它,变量的值与最后读取的单词保持一致。

3 个答案:

答案 0 :(得分:2)

提取后检查流的状态总是一个好主意。它会告诉您执行提取时是否有任何问题,或者文件流是否已达到文件结束字符(EOF)。

后一种情况就是你要处理的。您需要做的就是在流处于良好状态时执行提取,这通过以下方式惯用:

while (in >> str) {
    // ...
}

在流执行提取后,调用operator bool(),调用!fail()。使用while循环将允许自动执行下一次提取。它会在流执行不正确的提取时停止,可能是内存不足,遇到EOF字符或其他一些用户定义的情况。

答案 1 :(得分:1)

您已经失败了I / O的基本原则:您必须检查您的输入操作是否成功。你不能事先知道,你只有在尝试之后才知道:

for (std::string word; std::cin >> word; )
//                     ^^^^^^^^^^^^^^^^<----------- test for success
{
    std::cout << "Here is one word: " << word << std::endl;
}

答案 2 :(得分:1)

您必须记住输入操作符>>返回它使用的流,并且该流可以用作布尔条件。这意味着您可以将其用作循环条件:

while (some_stream >> some_variable)
{
    ...
}