c++中文件最后一个字符不能读入问题的解决

Posted xujih

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++中文件最后一个字符不能读入问题的解决相关的知识,希望对你有一定的参考价值。

在做一个实验的时候,需要将文件中的数据逐行读入,在读入的时候遇到了一个问题,前面几行的数据读入正常,最后一行数据的读入会少一个数据,数据格式如下

技术图片

 

 

 注意箭头处,这里是文件的末尾了,前面的数据之后都跟了一个换行符,最后一行数据没有换行就直接结束了。

我之前的做法是

    while (!feof(fin))
    {
        if (fgets(word, 64, fin) == NULL)
            break;
        
        word[strlen(word) - 1] = ;
        
                ......

代码并不完整,但是已经能够说明问题了,我是想在读入数据时不要读入多余的符号,如换行。

fgets(char *str, int n, FILE *stream)函数会一直读入数据,直到读入数据个数为n-1,这时在str末尾添加 ‘‘ ,读入结束。或者是读入换行符或文件结束符,函数会将读入的换行符添加到str末尾,但不会将文件结束符添加到str末尾。

我们来试验一下对不对

技术图片

 

 

第一行是我设置的试验数据,输入中文会影响判断,我将n的大小改成了17,并在word读入后加入了断点

技术图片

 

结果是,word读入了16个数据

 技术图片

 

 

再将n改回原来的大小再看一下,正常的读入是下面这样

技术图片

 

最后一行元素读入是这样,文件结束符EOF没有被写进去

 技术图片

 

 用最开始的做法会导致最后的“24”的“4”被改成“",所以最后的数据丢失

技术图片

 

 

 像这样加个判断就好了

技术图片

 

 技术图片

 

 结果正确了

以上是关于c++中文件最后一个字符不能读入问题的解决的主要内容,如果未能解决你的问题,请参考以下文章

将混合数据文件读入 C++ 字符串

在 C++ 中将文件读入字符数组

c++第二遍scanf读入问题

将字符串从文件中读入 1 个字符串,而不是整数 c++

Dev c++中{ }不能自动缩进怎么解决?

如何在 C++ 中将整个文件读入 std::string?