gpt4 book ai didi

c++ - while(!file.eof()) 和 while(file >> variable) 的区别

转载 作者:搜寻专家 更新时间:2023-10-30 23:57:50 25 4
gpt4 key购买 nike

首先,我有一个文本文件,其中有二进制数,每行一个数字。我正在尝试阅读它们并在 C++ 程序中总结它们。我写了一个函数,将它们转换为十进制并在之后添加它们,我确信该函数没问题。这是我的问题 - 对于这两种读取文本文件的不同方式,我得到不同的结果(并且只有一个结果是正确的)[我的函数是 decimal()]:

ifstream file;
file.open("sample.txt");
int sum = 0;
string BinaryNumber;
while (!file.eof()){
file >> BinaryNumber;
sum+=decimal(BinaryNumber);
}

这样我的总和就太大了,但数量很少。

ifstream file;
file.open("sample.txt");
int sum = 0;
string BinaryNumber;
while (file >> BinaryNumber){
sum+=decimal(BinaryNumber);
}

这样我就得到了正确的总和。经过一些测试后,我得出结论,使用 eof() 的 while 循环比另一个 while 循环多了一次迭代。所以我的问题是——这两种读取文本文件的方式有什么区别?为什么第一个 while 循环给出了错误的结果,它正在执行的额外迭代可能是什么?

最佳答案

区别是>>>先读取数据,然后告诉你是否成功,而file.eof()做检查在阅读之前。这就是为什么您使用 file.eof() 方法获得额外的读取,而该读取是无效的。

您可以修改 file.eof() 代码,通过将检查移动到读取后的某个位置来使其工作,如下所示:

// This code has a problem, too!
while (true) { // We do not know if it's EOF until we try to read
file >> BinaryNumber; // Try reading first
if (file.eof()) { // Now it's OK to check for EOF
break; // We're at the end of file - exit the loop
}
sum+=decimal(BinaryNumber);
}

但是,如果最后一个数据条目后没有分隔符,则此代码将中断。因此,您的第二种方法(即检查 >>> 的结果)是正确的方法。

编辑:这篇文章是为回应this comment而编辑的。 .

关于c++ - while(!file.eof()) 和 while(file >> variable) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23175114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com