C ++中文本文件末尾的两个点

时间:2014-05-21 01:31:32

标签: c++ file-io char text-files fstream

这是交易,我有一个文本文件,其中包含一本书中的一些句子,我想阅读并计算其中的句子数。我找到的一种方法是计算文件中的点数。它工作正常,直到最后一个字符。当读数到达最后一个字符(这是一个点)时,它会添加另一个点,我会仔细检查文本文件,最后只有一个点。当我在阅读过程中打印每个字符时,我看到最后的第二个点。这是我的代码:

#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;
}    

2 个答案:

答案 0 :(得分:4)

一旦你尝试读过最后一个角色后的某个角色,

files.eof()就是真的,而不是在你读完最后一个角色之后。因此,files.eof()在最后一个字符后成功,但在执行files >> caractere后会引发该标志。由于此时您不进行检查,caractere未经修改(它仍然是一个点),您的程序会一直运行,直到它再次循环。

您应该使用while (files >> caractere),因为输入流可以转换为布尔值,表明它是否处于有效状态。

答案 1 :(得分:1)

只需使用while (files >> caractere)

while (files.eof() == 0)已被破坏 - eof只有在您尝试阅读不存在的内容后才会出现错误(考虑到调用eof()时它不知道您会发生什么尝试阅读下一个 - 可能是下一个非空白字符或任何单个字符或数字 - 对于某些类型的数据和空白跳过行为eof()将被击中而其他人不会被击中。