C语言文件操作习题

帮忙做一下 将磁盘文件f1.txt和f2.txt中的字符按从小到大的顺序输出到磁盘文件f3.txt中。

#include "stdio.h"
int copy()
{
FILE *fpnew,*fpold1,*fpold2;
int ch;
if((fpnew=fopen("f3.txt","wb"))==NULL)
return -1;
if((fpold1=fopen("f1","rb"))==NULL)
return -1;
if((fpold2=fopen("f2","rb"))==NULL)
return -1;
while(1)
{
ch=fgetc(fpold1);
if(!feof(fpold1))
fputc(ch,fpnew);
else
break;
}
while(1)
{
ch=fgetc(fpold2);
if(!feof(fpold2))
fputc(ch,fpnew);
else
break;
}
fclose(fpnew);
fclose(fpold1);
fclose(fpold2);
return 0;
}
int main()
{ if(copy()==0)
printf("复制成功");
else
printf("复制失败");
}

这是我给你写的代码,排版、缩进好行有问题,楼上的代码是从那里复制来的吧??

        -物联网校企联盟技术部

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-04
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp1,*fp2,*fp3;
char st[100],ch;
int n=0,i,j,m;
if((fp1=fopen("f1.txt","r"))==NULL||(fp2=fopen("f2.txt","r"))==NULL||(fp3=fopen("f3.txt","w"))==NULL)
{
printf("文件打开失败,可能没创f1.txt或f2.txt.\n");
exit(0);
}
while((st[n++]=fgetc(fp1))!=EOF);//读取文件一中的内容,存入数组
while((st[n++]=fgetc(fp2))!=EOF);
printf("f1.txt和f2.txt中的字符分别为:\n");
for(i=0;i<n;i++)
putchar(st[i]);
for(i=0;i<n-1;i++)//排序
{
m=i;
for(j=i+1;j<n-1;j++)
if(st[j]<st[m])
m=j;
ch=st[i];
st[i]=st[m];
st[m]=ch;
}
printf("\n");
printf("排序后放入f3.txt的字符为:\n");
for(i=1;i<n-1;i++)
{
fputc(st[i],fp3);
putchar(st[i]);
}
printf("\n");
fclose(fp1);
fclose(fp2);
fclose(fp3);
return 0;
}运行结果:注意:运行时要先在存放运行代码的那个文件夹里创建f1.txt和f2.txt并在两个文件里输入一些字符,运行程序结束后会在这个文件夹里产生f3.txt,里面有排列好的内容
第2个回答  2013-04-03
int Partition(int *R,int i,int j)
{
int pivot=R[i];
while(i<j)
{
while(i<j&&R[j]>=pivot)
j--;
if(i<j)
R[i++]=R[j];
while(i<j&&R[i]<=pivot)
i++;
if(i<j)
R[j--]=R[i];
}
R[i]=pivot;
return i;
}
void QuickSort(int *R,int low,int high)
{
int pivotpos;
if(low<high)
{
pivotpos=Partition(R,low,high);
QuickSort(R,low,pivotpos-1);
QuickSort(R,pivotpos+1,high);
}
}//QuickSort

int main(void)
{
int size1,size2,size3=0;
char *ptr1,*ptr2,*ptr3;
//读第一个文件
FILE* f = fopen( "f1.txt", "rb" );
if( !f )
return -1;
fseek( f, 0, SEEK_END );
size1 = ftell( f );
size3+=size1;
ptr1=(char*)malloc(size1);
fseek( f, 0, SEEK_SET);
fread( ptr1, 1, size1, f );
fclose(f);
//读第二个文件

f = fopen( "f2.txt", "rb" );
if( !f )
return -1;
fseek( f, 0, SEEK_END );
size2 = ftell( f );
size3+=size2;
ptr2=(char*)malloc(size2);
fseek( f, 0, SEEK_SET);
fread( ptr2, 1, size2, f );
fclose(f);

//合并
ptr3=(char*)malloc(size3);
memcpy(ptr3,ptr1,size1);
memcpy(ptr3+size1,ptr2,size2);
free(ptr1);
free(ptr2);
//排序
QuickSort(ptr3,0,size3-1);
//写入
FILE* f = fopen( "f3.txt", "wb");
if(!f)
return -1;
fwrite(ptr3,1,size3,f);
free(ptr3);
return 0;
}
相似回答