求助!!c语言编程!急急急!大神帮帮忙!
文件7-2.dat中的数据如下:
35 87 234 67 90 123 450 12 58 48 25 74 324 500 610
思考:如果事先不知道文件7-2.dat中的数据个数,要通过读数据来统计数据的个数,再根据统计的数据个数分配内存单元,应该如何修改程序? 展开
以下代码是按“不知道文件中有多少个整数”的要求写的。
#include "stdio.h"
#include <stdlib.h>
int main(int argc,char *argv[]){
int n,*p;
int *myread(int *);
void sort(int *,int);
void mywrite(int *,int);
p=myread(&n);
sort(p,n);
mywrite(p,n);
free(p);//释放所申请的空间
return 0;
}
int *myread(int *n){
FILE *fp;
int t,*p;
if((fp=fopen("7-2.dat","r"))==NULL){
printf("Failed to open the file and exit...\n");
exit(0);
}
for(*n=0;fscanf(fp,"%d",&t)==1;(*n)++);//求文件有多少个整数
if((p=(int *)malloc(*n*sizeof(int)))==NULL){//动态申请内存
printf("Application memory failure...\n");
exit(0);
}
rewind(fp);//文件指针回到文件开头
for(t=0;fscanf(fp,"%d",p+t)==1;t++);//将文件数据读到动态数组p
fclose(fp);
return p;
}
void sort(int *p,int n){
int i,j,k;
for(i=0;i<n;i++){
for(k=i,j=k+1;j<n;j++)
if(p[k]>p[j])
k=j;
if(k!=i)
j=p[i],p[i]=p[k],p[k]=j;
printf("%d ",p[i]);//排序后的数据显示到屏幕,调试完毕删除此行
}
}
void mywrite(int *p,int n){
FILE *fp;
int m;
if((fp=fopen("7-2.out","w"))==NULL){
printf("Failed to create the file and exit...\n");
exit(0);
}
for(m=0;m<n;fprintf(fp,"%d ",p[m++]));
fclose(fp);
}
代码格式和运行结果图片:
2019-07-10 · IT职业教育领导品牌