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