文件的读取和输出,feof的错误

这个在while(!feof(pf1))的时候为社么只运行一次就跳过了,文件有三四个数据;


#include
#include
#include 
#include 
int main()
{
    int a[1000] = { 0 }, i = 0;
    FILE* pf1 = fopen("D:\\Ccourse2\\Project2\\file2.txt", "r");
    if (pf1 == NULL)
    {
        printf("Error: %s\n", strerror(errno));
        exit(-1);
    }
    FILE* pf2 = fopen("D:\\Ccourse2\\Project2\\file2.txt", "w");
    if (pf2 == NULL)
    {
        printf("Error: %s\n", strerror(errno));
        exit(-1);
    }
    while (!feof(pf1))
    {
        fscanf(pf1, "%d ", &a[i]);
        i++;
    }
    for (i--; i >= 0; i--)
    {
        fprintf(pf2, "%d ", a[i]);
    }
    fclose(pf1);
    fclose(pf2);
    free(pf1);
    free(pf2);
    return 0;
}


应该是因为使用free()函数导致了程序的运行错误而导致结果出现了异常,把两行free()的代码去除即可,关闭文件只需要使用fclose();

然后为了代码显得更规范,可以在读取file2文件后使用fclose()关闭文件。

修改如下:

参考链接:


https://baike.baidu.com/item/fclose/10942162?fr=aladdin

#include<stdio.h>
#include <stdlib.h>
#include<math.h>
#include <string.h>
#include <errno.h>
int main()
{
    int a[1000] = { 0 }, i = 0;
    FILE* pf1 = fopen("f:\\file2.txt", "r");
    if (pf1 == NULL)
    {
        printf("Error: %s\n", strerror(errno));
        exit(-1);
    }
   
    while (!feof(pf1))
    {
        fscanf(pf1, "%d ", &a[i]);
    //    printf("a[%d]=%d\n",i,a[i]);
        i++;
    }
   fclose(pf1); // 读取文件完后关闭文件 
   // free(pf1);  / 
     
//     printf("打开文件!\n");   
    FILE* pf2 = fopen("f:\\file2.txt", "w");
    if (pf2 == NULL)
    {
        printf("Error: %s\n", strerror(errno));
        exit(-1);
    }
    
    //printf("开始写文件,i=%d!\n",i);
    for (i--; i >= 0; i--)
    {
        //printf("a[%d]=%d\n",i,a[i]);
        fprintf(pf2, "%d ", a[i]);
    }
     
    fclose(pf2);

   // free(pf2);
    return 0;
}
 
 

img

该回答引用GPTᴼᴾᴱᴺᴬᴵ
这是因为在写入文件后立即将文件指针指向了文件的开头,这样会导致文件的内容被清空,只留下了最后一个读入的整数。

具体来说,以下代码将文件指针指向了文件的开头:

FILE* pf2 = fopen("D:\\Ccourse2\\Project2\\file2.txt", "w");

建议使用不同的文件名来分别存储输入和输出数据,或者在写入输出文件之前将输入文件的数据存储到数组中,然后关闭输入文件再打开输出文件进行写入操作。同时,应该避免在使用 free() 释放文件指针,因为这些指针不是由动态分配内存函数分配的,应该使用 fclose() 函数来关闭文件。