有两个磁盘文件A和B,各存放一行字母,今要求把这两个文件中的信息合并…………
#include<stdio.h>#include<stdlib.h>#include<string.h>voidmain(){FILE*fp1,*fp2,*fp3;ch...
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{
FILE *fp1,*fp2,*fp3;
char ch[255],temp;
int i=0,j,n;
if((fp1=fopen("file1.txt","r"))==NULL)
{
printf("不能打开源文件!\n");
return;
}
if((fp2=fopen("file2.txt","r"))==NULL)
{
printf("不能打开源文件!\n");
return;
}
if((fp3=fopen("file3.txt","w"))==NULL)
{
printf("不能打开源文件!\n");
return;
}
while(!feof(fp1))
{
ch[i++]=fgetc(fp1);
}
while(!feof(fp2))
{
ch[i++]=fgetc(fp2);
}
n=strlen(ch);
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
if(ch[i]>ch[j])
{
temp=ch[i];
ch[i]=ch[j];
ch[j]=temp;
}
}
for(i=0;i<n;i++)
{
fputc(ch[i],fp3);
putchar(ch[i]);
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
}
帮忙指正下错误,谢谢 展开
#include<stdlib.h>
#include<string.h>
void main()
{
FILE *fp1,*fp2,*fp3;
char ch[255],temp;
int i=0,j,n;
if((fp1=fopen("file1.txt","r"))==NULL)
{
printf("不能打开源文件!\n");
return;
}
if((fp2=fopen("file2.txt","r"))==NULL)
{
printf("不能打开源文件!\n");
return;
}
if((fp3=fopen("file3.txt","w"))==NULL)
{
printf("不能打开源文件!\n");
return;
}
while(!feof(fp1))
{
ch[i++]=fgetc(fp1);
}
while(!feof(fp2))
{
ch[i++]=fgetc(fp2);
}
n=strlen(ch);
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
if(ch[i]>ch[j])
{
temp=ch[i];
ch[i]=ch[j];
ch[j]=temp;
}
}
for(i=0;i<n;i++)
{
fputc(ch[i],fp3);
putchar(ch[i]);
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
}
帮忙指正下错误,谢谢 展开
3个回答
展开全部
你的数组ch末尾是不是忘加0了?
(去掉排序算法后)应是这样
void main()
{
FILE *fp1, *fp2, *fp3;
char ch[255], temp;
int i = 0, j, n;
if ((fp1 = fopen("file1.txt", "r")) == NULL)
{
printf("不能打开源文件!\n");
return;
}
if ((fp2 = fopen("file2.txt", "r")) == NULL)
{
printf("不能打开源文件!\n");
return;
}
if ((fp3 = fopen("file3.txt", "w")) == NULL)
{
printf("不能打开源文件!\n");
return;
}
while (!feof(fp1))
{
ch[i++] = fgetc(fp1);
}
while (!feof(fp2))
{
ch[i++] = fgetc(fp2);
}
ch[i]=0; /* 这一步很重要,不然strlen会判断失误 */
n = strlen(ch);
/*for (i = 0; i<n - 1; i++)
{
for (j = i + 1; j<n; j++)
{
if (ch[i]>ch[j])
{
temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
}
}
}*/
for (i = 0; i<n; i++)
{
fputc(ch[i], fp3);
putchar(ch[i]);
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
}
追答
你是文件中有空格吗?
空格所对应的字符是32,比所有字符都“小”,所以空格会被排序排到前面,可以这样
for (i = 0; i<n; i++)
{
if (ch[i] == 0x20) /* 0x20是空格字符 */
{
continue;
}
fputc(ch[i], fp3);
putchar(ch[i]);
}
展开全部
while(!feof(fp1))
{
ch[i++]=fgetc(fp1); 这里要判断i的累加是否超过255
}
while(!feof(fp2))
{
ch[i++]=fgetc(fp2); 这里同样判断一下
}
n=strlen(ch); 需要计算吗?就是i
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
if(ch[i]>ch[j])
{
temp=ch[i];
ch[i]=ch[j];
ch[j]=temp;
}
}
{
ch[i++]=fgetc(fp1); 这里要判断i的累加是否超过255
}
while(!feof(fp2))
{
ch[i++]=fgetc(fp2); 这里同样判断一下
}
n=strlen(ch); 需要计算吗?就是i
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
if(ch[i]>ch[j])
{
temp=ch[i];
ch[i]=ch[j];
ch[j]=temp;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你弄太复杂了。。看不出来。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询