整容说文库 > 程序代码 > 教育资讯

这段读文本文件的代码哪里出错了?最后一行总是读两遍。

来源:学生作业帮助网 编辑:整容说文库 时间:2021/01/17 13:56:53 程序代码
这段读文本文件的代码哪里出错了?最后一行总是读两遍。程序代码
代码如下:
FILE *fp;
char line[255];
memset(line,0,255);
fp = fopen("file.txt","r+");
if( fp == NULL )
{
    printf("file can not open!!");
    exit( 1 );
}
while( !feof( fp ) )
{
   fgets(line,255,fp);//每行中的内容都读入到line中
   nline++;//行记数,共有多少行
   printf("%s",line);
}
如果文本文件最后一行的内容为:"abcdefgh"然后敲回车换行,但下一行没任何内容也没有空格,仅仅敲一下回车,然后用按行读,最后一行总是读两遍(两行abcdefgh)。这到底是哪里出错了呢?
最后一行回车后啥也没有,导致fgets出了点小问题,应该检测其返回值,fgets出错返回NULL。
while( !feof( fp ) )
{
    if(NULL == fgets(line,255,fp))
        continue;
    nline++;
    printf("%s",line);
}
楼上:这样还是不行啊?照你这样读不出来第一行。
真是怪了。到底哪里出错了呢?以前怎么没发现这个毛病呢?
memset(line,0,255);
加入
fgets(line,255,fp);//每行中的内容都读入到line中
之前 看看.
帮你改一下

while( !feof( fp ) )
{
memset(line, 0, 255);    //注意 这里!!!
fgets(line,255,fp);//每行中的内容都读入到line中
nline++;//行记数,共有多少行
printf("%s",line);
}

我想楼主应该知道你错在哪里了吧 :)
谢谢各位的指点,现在结贴。
程序代码