c - 这段代码有什么错误?(C - 文件处理)

标签 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;
 }

最佳答案

那么您想知道错误吗?我发现了一个巨大的。

当我运行你的程序时,我确定此行之后发生了段错误:

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/

相关文章:

c - 在 c 中按字典顺序打印 trie

c++ - Linux 中的实时 RX 和 TX 速率

使用 strcpy 将输入的字符串复制到字符串数组的 "ith"元素中

javascript - 如何按嵌套值对 JSON 对象进行排序?

iphone - 在 Objective-C 中对 NSArray 进行排序的更好方法

c - 在返回 void* 的函数中返回常规对象

java - 如何使用Mybatis和PostgreSQL创建一个空数组?

arrays - 将 String 转换为 Double 并检查是否为 nil

c++ - 实现一个数组类,作业麻烦

C:检测长数组中的重复整数