有两个磁盘文件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);
}
帮忙指正下错误,谢谢
展开
 我来答
可恶的考试9
2014-06-14 · 超过32用户采纳过TA的回答
知道答主
回答量:86
采纳率:0%
帮助的人:67.7万
展开全部

你的数组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]);
    }
coinv
2014-06-13 · TA获得超过410个赞
知道小有建树答主
回答量:775
采纳率:0%
帮助的人:444万
展开全部
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;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
春梦了无痕_啊
2014-06-13 · TA获得超过164个赞
知道小有建树答主
回答量:399
采纳率:0%
帮助的人:132万
展开全部
你弄太复杂了。。看不出来。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式