这个在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()关闭文件。
修改如下:
参考链接:
#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;
}
该回答引用GPTᴼᴾᴱᴺᴬᴵ
这是因为在写入文件后立即将文件指针指向了文件的开头,这样会导致文件的内容被清空,只留下了最后一个读入的整数。
具体来说,以下代码将文件指针指向了文件的开头:
FILE* pf2 = fopen("D:\\Ccourse2\\Project2\\file2.txt", "w");
建议使用不同的文件名来分别存储输入和输出数据,或者在写入输出文件之前将输入文件的数据存储到数组中,然后关闭输入文件再打开输出文件进行写入操作。同时,应该避免在使用 free() 释放文件指针,因为这些指针不是由动态分配内存函数分配的,应该使用 fclose() 函数来关闭文件。