关于feof(fp)多处理一次的解决办法(C语言)
- 读取文件时,按以下代码读取时,while (!feof(fp))会多循环一次,导致字符串str的最后会出现乱码的情况,如下:
void read(FILE* fp,char str[])
{
char filename[40];
gets_s(filename);
fp = fopen(filename, "r");
if (fp == NULL)
{
printf("\nERROR!\n");
exit(0);
}
int i = 0;
while (!feof(fp))
{
fscanf(fp,"%c",&str[i]);
i++;
}
printf("文件中读出内容为:");
puts(str);
fclose(fp);
}
- 如果只读入一个字符串则可以将循环改为
fscanf(fp, "%s", str);
- 但如果想要读入空格或是不止一个字符串,则应该在循环中多加一层判断
int i = 0;
while (1)
{
c = fgetc(fp); //从文件中读取一个字符,并赋给c
if (feof(fp)) //判断文件是否处理到文件尾
{
str[i] = '\0'; //若处理到文件尾,则给当前的位置添加字符串结束符\0
break; //并终止循环
}
str[i] = c; //经过判断后,再将c赋给str[i],这样就不会出现乱码了,因为在前面的判断中,已经将多处理的那一次终止了,多余的字符就不会赋给str[i]了
i++;
}