有两个磁盘文件data1和data2,各存放若干整数,并且这些整数是按从小到大的顺序存放的。将这两个文件中的数据合并输出到文件data中,data中的数据要求有序。
假设是文本文件,且文件中的数据是用空格或Tab或回车分隔的(也可考虑是二进制文件)
#include<stdio.h>
#include<stdlib.h>
void main()
{
FILE *fr1,*fr2,*fw;
int i1,i2,s1,s2;
fr1=fopen("data1","r"); /*打开文件data1*/
fr2=fopen("data2","r"); /*打开文件data2*/
fw=fopen("data","w"); /*打开文件data*/
s1=fscanf(fr1,"%d",&i1); /*从文件data1读第一个数据,不成功返回EOF*/
s2=fscanf(fr2,"%d",&i2); /*从文件data2读第一个数据,不成功返回EOF*/
while(s1!=EOF&&s2!=EOF) /*文件data1和data2均未结束,循环*/
{
if(i1<i2)
{
fprintf(fw,"%d ",i1); /*从文件data1读的数据写入文件data*/
s1=fscanf(fr1,"%d",&i1); /*从文件data1读下一个数据*/
}
else
{
fprintf(fw,"%d ",i2); /*从文件data2读的数据写入文件data*/
s2=fscanf(fr2,"%d",&i2); /*从文件data2读下一个数据*/
}
}
while(s1!=EOF) /*文件data1的剩余数据写入文件data*/
{
fprintf(fw,"%d ",i1);
s1=fscanf(fr1,"%d",&i1);
}
while(s2!=EOF) /*文件data2的剩余数据写入文件data*/
{
fprintf(fw,"%d ",i2);
s2=fscanf(fr2,"%d",&i2);
}
fcloseall();
}