当没有更多的单词时,如何使用>>停止阅读

How to stop reading using >> when there are no more word left

本文关键字:gt 何使用 单词时      更新时间:2023-10-16

我在一个文本文件中得到了一个单词列表,所有单词都用换行符分隔。使用流和>>阅读它们,不知道有多少字。如何告诉程序何时停止?我已经对其进行了测试,变量的值与读取的最后一个单词保持不变。

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

后一种情况就是您正在处理的情况。您需要做的就是在流处于良好状态时执行提取,这是按以下方式完成的:

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

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

您未能实现 I/O 的基本原则:您必须检查输入操作是否成功。你不可能提前知道,你只有在你尝试过之后才知道:

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

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

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