我想要做的是将 n 个(从用户获取的)元素写入文件。然后再次将元素读取到数组中并对它们进行排序,然后再次将它们写入另一个文件中。 最后打开该文件并显示其内容。 但代码似乎不起作用,检查了所有语法、语法等,错误是什么?
#include<stdio.h>
struct data
{
int a,ar[100];
}e;
int main()
{ FILE *f1,*f2;
int i,j,n,t;
printf("\nEnter Array Size:");
scanf("%d",&n);
f1=fopen("Array.txt","w");
for(i=0;i<n;i++)
{ printf("\nEnter %d element:",i+1);
scanf("%d",&e.a);
fprintf(f1,"%d",e.a);
}
fflush(stdin);
fclose(f1);
rewind(f1);
i=0;
f1=fopen("Array.txt","r");
while((fscanf(f1,"%d",&e.ar[i++]))!=EOF)
{}
fclose(f1);
for(i=0;i<n;i++)
{ for(j=0;j<n-1;j++)
{ if(e.ar[j]>e.ar[j+1])
{ t=e.ar[j];
e.ar[j]=e.ar[j+1];
e.ar[j+1]=t;
}
}
}
f2=fopen("Sort.txt","w");
i=0;
while((fprintf(f2,"%d",e.ar[i]))!=EOF)
{ i++;}
fclose(f2);
f2=fopen("Sort.txt","r");
while((fscanf(f2,"%d",&e.a))!=EOF)
{ printf("%d ",e.a);
}
fclose(f2);
return 0;
}
最佳答案
那么您想知道错误吗?我发现了一个巨大的。
当我运行你的程序时,我确定此行之后发生了段错误:
f2=fopen("Sort.txt","w");
这里的主要错误是您打开了一个文件来向其中写入数据,但您正在创建一个相当困惑的循环。
这是您的代码:
i=0;
while((fprintf(f2,"%d",e.ar[i]))!=EOF)
{ i++;}
在它所处的状态下,i的值将超过你的ar int数组的上限值。您将上限值设置为 100,但在 while 循环中,它将无休止地运行,直到发生段错误(当 i 超过 100 时),因为 fprintf 永远不会返回 EOF(根据 Linux 手册中关于 fprintf 的声明)。
我建议的是这样的:
for(i=0;i<n;i++){
fprintf(f2,"%d",e.ar[i]);
}
其中 n 是最终要打印的元素数量(如用户在程序开始时指示的那样)。
关于c - 这段代码有什么错误?(C - 文件处理),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36957498/