事情是这样的,我有一个文本文件,其中包含一本书中的一些句子,我想阅读并计算其中的句子数量。我发现的一种方法是计算文件中的点数。它工作正常,直到最后一个字符。当读数到达最后一个字符(这是一个点)时,它会添加另一个点,我仔细检查了文本文件,最后只有一个点。当我在阅读过程中打印每个字符时,我看到最后的第二个点。这是我的代码:
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
int main(void)
{
ifstream files("assommoir.txt");
char caractere;
int n = 0;
if (files.fail() == 0)
{
while (files.eof() == 0)
{
files >> caractere;
cout << caractere;
if (int(caractere) == 46)
n++;
}
cout << n << "\n";
}
else
cout << "reading problem detected" << endl;
}
最佳答案
files.eof()
在您尝试阅读最后一个字符之后为真,而不是在您阅读完最后一个字符后为真。因此,files.eof()
在最后一个字符后成功,但在您执行 files >> caractere
后会引发标志。由于您此时不检查,caractere
未被修改(它仍然是一个点)并且您的程序继续运行直到再次循环。
您应该使用 while (files >> caractere)
,因为输入流可以转换为 bool 值,指示它是否处于有效状态。
关于c++ - C++文本文件末尾的两个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23772609/