码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-11-06 13:11:53      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:nbsp   mic   需要   inf   元素   影响   函数   大小   null   

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

技术图片

 

 

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

我之前的做法是

    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",所以最后的数据丢失

技术图片

 

 

 像这样加个判断就好了

技术图片

 

 技术图片

 

 结果正确了

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

标签:nbsp   mic   需要   inf   元素   影响   函数   大小   null   

原文地址:https://www.cnblogs.com/xujih/p/11804472.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!