在c++中如何使用while循环读取文件



为什么可以使用while循环(如

)读取文件?
while (file >> variable)

while (getline(xx, yy))

>>getline函数返回布尔值吗?

流操作符求值为对流本身的引用。这允许链接,例如file >> variable >> variable >> variable

当您将它与流对象可转换为布尔值(如果没有设置错误标志,其值为true)的事实结合起来时,是的,您将获得这种效果。

如果我们有这样的内容:

包含数据的文件:

11 
22 
13
45
19

然后是c++文件:

int variable;
int count = 0;
while(!file.eof())
{
    count ++;
    file >> variable;
}
cout << "there are  " << count << " numbers in the file";

的输出将是6,因为当我们读取19时,eof为假,只有当我们尝试读取NEXT数字时才会设置eof。我们可以通过将count++移到if语句中来解决这个问题,这样我们就有了if (file >> variable) count++;。但是这样会变得很笨拙。

如果我们这样做:

while(file >> variable)
{
   count++;
}
当尝试读取19之后的下一个数字时,

循环退出。

编辑:修正"reason why it counts wrong"以澄清eof()在" failed read"之后设置。

还应该指出,while(!file.eof())不能很好地工作与不良输入。假设我们有上面的代码,但输入是11 22 aa ... -当输入是aa时,eof()不会被设置。输入只是停止并返回一个错误。但是由于eof()仍然是false(技术上我们可以从文件中读取更多内容,只要我们不尝试将其作为数字读取)。这就导致了一个无限循环!while (file >> variable)解决方案避免了这个问题——当然,您可能仍然需要添加一些额外的代码来说明"我期望这里是一个数字,但我得到了其他东西"。但是你不必担心循环会永远不读取任何内容。

有时是为了方便;或者,它们返回一个可强制转换为bool的类型。您应该参考这些函数(或流操作符)的文档。

相关内容

  • 没有找到相关文章

最新更新