0x00 问题
C代码如下:
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
FILE *fp = NULL;
fp = fopen("test.txt","r");
if(fp==NULL)
{
printf("文件不存在\n");
exit;
}
char str[30]={'\0'};
while(!feof(fp))
{
fscanf(fp,"%s",str);
printf("%s\n",str);
}
fclose(fp);
}
文本文件中的内容如下:
a
b
c
程序的读取结果如下,最后一行出现重复读取问题:
a
b
c
c
0x01 问题解决办法
需要遵循先读取再判断文件是否结束的原则。
在C语言中,feof()函数的使用是根据指针内容判断的,而非指针位置,无论指针是否到头,甚至超出了,它都需要先读取指针的内容,看一看内容是否是EOF,然后才知道文件是否到头。上述代码中第四次循环遇到EOF时不能读入有效字符,就会重复输出最后一个字符。
故将代码修改为如下形式:
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
FILE *fp = NULL;
fp = fopen("test.txt","r");
if(fp==NULL)
{
printf("文件不存在\n");
exit;
}
char str[30]={'\0'};
fscanf(fp,"%s",str);
while(!feof(fp))
{
printf("%s\n",str);
fscanf(fp,"%s",str);
}
fclose(fp);
}