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

爱⌒轻易说出口 提交于 2019-12-03 17:16:28

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

 

 

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

我之前的做法是

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

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

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

我们来试验一下对不对

 

 

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

 

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

 

 

 

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

 

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

 

 

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

 

 

 像这样加个判断就好了

 

 

 

 结果正确了

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!