C文件处理[作业]

(1)比较两个文本文件并打印出它们第一个不相同的行(文件每行字符数不多于 80)。
(2)文本文件 num1.txt 和 num2.txt 中各有一组用空格分隔的整数,将 num1.txt 和
num2.txt 联合排序,并将结果保存在 num3.txt 中,例如图 1 所示。
(3)现有两个文本文件 db1.txt 和 db2.txt。db1.txt 中第一列为姓名,第二列为英语
成绩;db2.txt 中第一列为姓名,第二列为数学成绩。通过姓名字段将 db1.txt 文件关联到
db2.txt 文件生成 db3.txt 文件。db3.txt 文件第一列为姓名,第二列为英语成绩,第三列为
数学成绩,第四列为平均成绩,例如图 2 所示。

在这里插入图片描述
在这里插入图片描述

T1

#include<stdio.h>
#include<string.h>
int main()
{
	FILE *fp1,*fp2;
	int flag=0;
	if(  ((fp1=fopen("file1.txt","r"))==NULL) ||  ((fp2=fopen("file2.txt","r"))==NULL)   )
	{
		printf("cannot open file\n");
	return 0;
	}
	fp1=fopen("file1.txt","r");
	fp2=fopen("file2.txt","r");
	char line1[2000],line2[2000];
	while(!feof(fp1)&&!feof(fp2))
	{
		fgets(line1,80,fp1);
		fgets(line2,80,fp2);
		if(strcmp(line1,line2)!=0)
		{
			printf("%s\n",line1);
			printf("%s\n",line2);
			flag=1;
			break;
		}
		memset(line1,0,sizeof(line1));
		memset(line2,0,sizeof(line2));
	}
	if(flag==0) printf("The two files are same");
	fclose(fp1);
	fclose(fp2);
 } 

T2

#include<stdio.h>
void sort(int a[],int N)
{
	int i,t,j;
    for(i=0;i<N;i++)
    {
    	for(j=0;j<N;j++)
        {
            if(a[j]>a[i]) 
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
        }
    }
}


int main()
{
	FILE *fp1=fopen("num1.txt","r");
	FILE *fp2=fopen("num2.txt","r");
	FILE *fp3=fopen("num3.txt","w");
	
	if(fp1==NULL||fp2==NULL||fp3==NULL)
	{
		printf("cannot open file\n");
		return 0;
	}
	
	int num[1000];
	int index=0,i=0;
	
	while(!feof(fp1))
	{
		fscanf(fp1,"%d",&num[index]);
		index++;
	}
	while(!feof(fp2))
	{
		fscanf(fp2,"%d",&num[index]);
		index++;
	}
	
	sort(num,index);
	while(i<index)
	{
		printf("%d ",num[i]);
		i++;
	}
	
	i=0;
	while(i<index)
	{
		fprintf(fp3,"%d ",num[i]);
		i++;
	}
	
	fclose(fp1);
	fclose(fp2);
	fclose(fp3);

}

T3

#include<stdio.h>
#include<string.h>
struct stu{
	char name[200];
	int english;
	int math;
	int ave;
};
int main()
{
	FILE *fp1=fopen("db1.txt","r");
	FILE *fp2=fopen("db2.txt","r");
	FILE *fp3=fopen("db3.txt","w");
	
	if(fp1==NULL||fp2==NULL||fp3==NULL)
	{
		printf("cannot open file\n");
		return 0;
	}
	int index1=0,index2=0;
	struct stu stu1[20],stu2[20];
	while(!feof(fp1))
	{
		fscanf(fp1,"%s",stu1[index1].name);
		fscanf(fp1,"%d",&stu1[index1].english);
		index1++;
	}
	
	while(!feof(fp2))
	{
		fscanf(fp2,"%s",stu2[index2].name);
		fscanf(fp2,"%d",&stu2[index2].math);
		index2++;
	}
	int i,j,k=0;
	struct stu stu3[20];
	for(i=0;i<index1;i++)
	{
		for(j=0;j<index2;j++)
		{
			if(strcmp(stu1[i].name,stu2[j].name)==0)
			{
				strcpy(stu3[k].name,stu1[i].name);
				stu3[k].english=stu1[i].english;
				stu3[k].math=stu2[j].math;
				stu3[k].ave=(stu3[k].english+stu3[k].math)/2;
				k++;
			}
		}
	}
	for(i=0;i<k;i++)
	{
		printf("%s %d %d %d\n",stu3[i].name,stu3[i].english,stu3[i].math,stu3[i].ave);
		fprintf(fp3,"%s %d %d %d\n",stu3[i].name,stu3[i].english,stu3[i].math,stu3[i].ave);
	}
	fclose(fp1);	
	fclose(fp2);	
	fclose(fp3);	
}
	

memset(转载)

  1. memset()函数原型是extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组,
    c:是赋给buffer的值,
    count:是buffer的长度.

这个函数在socket中多用于清空数组.如:原型是memset(buffer, 0, sizeof(buffer))

Memset 用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’;
例:char a[100];memset(a, ‘/0’, sizeof(a));
memset可以方便的清空一个结构类型的变量或数组。

如:

struct sample_struct
{
char csName[16];
int iSeq;
int iType;
};

对于变量:
struct sample_strcut stTest;

一般情况下,清空stTest的方法:

stTest.csName[0]=’/0’;
stTest.iSeq=0;
stTest.iType=0;

用memset就非常方便:
memset(&stTest,0,sizeof(struct sample_struct));

如果是数组:

struct sample_struct TEST[10];

memset(TEST,0,sizeof(struct sample_struct)*10);

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值