C语言:文件数据整理放入另一文件

写在之前:

耗时两小时半肝出来的C语言作业…
耗时这么长是因为文件操作我没咋学好,能弄出来是基于书本 其他的博主的博客参照写出的,这次弄清了fread fwrite 和fscanf fprintf的运用区别。

同时还收获了如何将一个文件数据复制入另一个文件。这个相比这次作业较为简单,但也是这次作业的基础。

代码分析:

原始文件数据:
1005 zhang 72.5
1004 li 60.5
1001 sun 75.5
1002 zhao 83.0
1010 qian 80.2
1009 zhou 90.0
1007 liu 76.5
1003 huang 95.5
1006 zheng 74.5
1008 wang 81.5

由整体数据,易得知为结构体的内容。

代码思路:
由一开始了解到文件复制
想到,不如在现有的文件对数据进行排序之后再复制入另一个文件。
**问题:**怎样在已有的文件中对其数据进行整理?

代码展示:


#include<stdio.h>
struct p//定义的结构体
{
    
    
	int num;
	char stu[100];
	double n;
}temp;

int main()
{
    
    
	int i,j,sum=0;//sum初始化后面有累加
	char ch;
	struct p peo[100]={
    
    0};//初始化,宽度设大一点但有一个弊端
	FILE* fp1 = fopen("stu1.txt", "r");//只读
	FILE* fp2 = fopen("056.txt", "w");//只写
 
	if (NULL == fp1)
	{
    
    
		printf("open file stu1.txt");
	}
 
	if (NULL == fp2)
	{
    
    
		printf("open file 056.txt");
	}
	//一般的判断文件打开状态
while(!feof(fp1))
{
    
    
	fscanf(fp1,"%d%s%lf",&(peo[sum].num),&(peo[sum].stu),&(peo[sum].n));
	sum++;
}//读文件进定义好的结构体
 for(i=0;i<10;i++)
 {
    
    
	 for(j=0;j<=9-i;j++)
	 {
    
    
		 if(peo[j].num>peo[j+1].num)
		 {
    
    
			 temp=peo[j];
			 peo[j]=peo[j+1];
			 peo[j+1]=temp;
		 }
	 }
 }//读好了进行冒泡排序
for(i=1;i<sum;i++)
{
    
    
	fprintf(fp2,"%d %s %.1f\n",peo[i].num,peo[i].stu,peo[i].n);
}//写入文件,这里把i=1是为了避开peo[0]一排0的情况
	while ((ch=fgetc(fp1))!=EOF)
	{
    
    
		fputc(ch,fp2);
	}//这段代码就是文件复制的核心但上一段代码已经将其写入fp2,所以可有可无。

	fclose(fp1);
	fclose(fp2);//有开必有关
	fp1 = NULL;
	fp2 = NULL;
	return 0;
}

具体代码分析在其中。

存入另一个文件之后的数据:
1001 sun 75.5
1002 zhao 83.0
1003 huang 95.5
1004 li 60.5
1005 zhang 72.5
1006 zheng 74.5
1007 liu 76.5
1008 wang 81.5
1009 zhou 90.0
1010 qian 80.2

猜你喜欢

转载自blog.csdn.net/yooppa/article/details/115266917