这段代码中的错误是什么?(C - 文件处理)

时间:2016-04-30 16:40:10

标签: c arrays sorting file-handling

我想要做的是将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;
 }

1 个答案:

答案 0 :(得分:0)

所以你想知道错误?我找到了一个巨大的。

在我运行程序时,我确定在此行之后发生了分段错误:

f2=fopen("Sort.txt","w");

这里的主要错误是您打开了一个用于向其写入数据的文件,但是您正在制作一个相当混乱的循环。

这是你的代码:

 i=0;
 while((fprintf(f2,"%d",e.ar[i]))!=EOF)
 { i++;}

在它所处的状态中,i的值将超过ar int数组的上限值。您将上限值设置为100,但在while循环中,它将无休止地运行,直到发生分段错误(当我超过100)时,因为fprintf永远不会返回EOF(根据fprintf声称的linux手册)。 / p>

我建议的是:

for(i=0;i<n;i++){
    fprintf(f2,"%d",e.ar[i]);
}

其中n是最终打印的元素数(由用户在程序开头指示)。