鱼C论坛

 找回密码
 立即注册
查看: 1029|回复: 8

[已解决]c语言 文件

[复制链接]
发表于 2021-8-13 11:44:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
/****有两个磁盘文件a.txt文件内容为(to catch up)和b.txt文件内容为(a moment),要求合并两个文件,
产生一个新文件,新文件的内容是按字母顺序。即文件内容为:aaccehmmnooptttu*******/
#include "stdio.h"
#include "stdlib.h"
void main ()
{
        FILE *fp1,*fp2,*fp3;
        char ch1,ch2,ch3[50];
        int i=0,j,temp;
        if(!(fp1=fopen("d:\\exe\\a.txt","r")))
             {
                printf("not been found !");
                exit(0);
             }
        if(!(fp2=fopen("d:\\exe\\b.txt","r")))
             {
                printf("not been found !");
                exit(0);
             }
                if(!(fp3=fopen("d:\\exe\\c.txt","w")))
            {
                printf("not been found !");
                exit(0);
                }
                ch1=fgetc(fp1);
                while(ch1!=EOF)
                {  
                        ch3[ i++]=ch1;
                ch1=fgetc(fp1);
                }                       //将ch1的值存入数组ch3。
                ch2=fgetc(fp2);
                while(ch2!=EOF)
                {
                ch3[i]=ch2;
                i++;
                ch2=fgetc(fp2);
                }                      //将ch2的值存入数组ch3。
                ch3[i]='\0';          
                for(j=0;ch3[j];j++)
                {
                printf("%c",ch3[j]);
                }
                for(i=0;ch3[j];i++)
                {
        for(j=i+1;ch3[j];j++)
                        {
                        if(ch3[i]>ch3[j])
                                {
                                temp=ch3[i];
                                ch3[i]=ch3[j];
                                ch3[j]=temp;
                                }
                        }
                }                   //冒泡法排序。
                for(i=0;ch3[j];i++)
                {
                
                        fputc(ch3[j],fp3);

                }               
fclose (fp1);
fclose (fp2);
fclose (fp3);
}
最佳答案
2021-8-14 06:42:10
本帖最后由 jhq999 于 2021-8-14 06:55 编辑

我是用vs2012写的打开文件的函数不一样,但意思一样,你要是复制的话,把打开文件那3段修改一下.
void main ()
{

        FILE *fp1,*fp2,*fp3;
        char ch1,ch2,ch3[50];
        int i=0,j,temp;
        if(fopen_s(&fp1,"e:\\a.txt","r"))
        {
                printf("not been found !");
                return;
        }
        if(fopen_s(&fp2,"e:\\b.txt","r"))
        {
                printf("not been found !");
                return;
        }
        if(fopen_s(&fp3,"e:\\c.txt","w"))
        {
                printf("not been found !");
                return;
        }
        ch1=fgetc(fp1);
        while(ch1!=EOF)
        {  
                ch3[ i++]=ch1;
                ch1=fgetc(fp1);
        }                       //将ch1的值存入数组ch3。
        ch2=fgetc(fp2);
        while(ch2!=EOF)
        {
                ch3[i]=ch2;
                i++;
                ch2=fgetc(fp2);
        }                      //将ch2的值存入数组ch3。
        ch3[i]='\0';          
        for(j=0;ch3[j];j++)
        {
                printf("%c",ch3[j]);
        }
        for(i=0;ch3[i+1];i++)//////////////////////ch3[j]换成ch3[i+1],用ch3[j],i=1时j已经循环到‘\0’了ch3[j]已经是0,退出循环。
        {
                for(j=i+1;ch3[j];j++)
                {
                        if(ch3[i]>ch3[j])
                        {
                                temp=ch3[i];
                                ch3[i]=ch3[j];
                                ch3[j]=temp;
                        }
                }
        }                   //冒泡法排序。
        for(i=0;ch3[i];i++)///////////////////ch3[j]换成ch3[i],和上面说明一样ch3[j]已经是0,直接啥也没写。
        {

                fputc(ch3[i],fp3);///////////////ch3[j]换成ch3[i]ch3[j]就是0,只在c.txt里写了一个'\0'

        }               
        fclose (fp1);
        fclose (fp2);
        fclose (fp3);

        getchar();
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-13 20:01:10 | 显示全部楼层
本帖最后由 jhq999 于 2021-8-13 20:11 编辑

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-13 20:52:23 | 显示全部楼层
本帖最后由 jhq999 于 2021-8-13 21:05 编辑
/****有两个磁盘文件a.txt文件内容为(to catch up)和b.txt文件内容为(a moment),要求合并两个文件,
产生一个新文件,新文件的内容是按字母顺序。即文件内容为:aaccehmmnooptttu*******/
#include "stdio.h"
#include "stdlib.h"
void main ()
{
        FILE *fp1,*fp2,*fp3;
        char ch1,ch2,ch3[50];
        int i=0,j,temp;
        if(!(fp1=fopen("d:\\exe\\a.txt","r")))
             {
                printf("not been found !");
                exit(0);
             }
        if(!(fp2=fopen("d:\\exe\\b.txt","r")))
             {
                printf("not been found !");
                exit(0);
             }
                if(!(fp3=fopen("d:\\exe\\c.txt","w")))
            {
                printf("not been found !");
                exit(0);
                }
                ch1=fgetc(fp1);
                while(ch1!=EOF)
                {  
                        ch3[ i++]=ch1;
                ch1=fgetc(fp1);
                }                       //将ch1的值存入数组ch3。
                ch2=fgetc(fp2);
                while(ch2!=EOF)
                {
                ch3[i]=ch2;
                i++;
                ch2=fgetc(fp2);
                }                      //将ch2的值存入数组ch3。
                ch3[i]='\0';          
                for(j=0;ch3[j];j++)
                {
                printf("%c",ch3[j]);
                }
                for(i=0;ch3[i+1];i++)/////////////////////////////////////////////////////////////////把ch3[j]替换成ch3[i+1],否则只能进行第一轮冒泡
                {
        for(j=i+1;ch3[j];j++) 
                        {
                        if(ch3[i]>ch3[j])
                                {
                         
                                }
                        }
                }                   //冒泡法排序。
                for(i=0;ch3[j];i++)
                {
                
                        fputc(ch3[j],fp3);

                }               
fclose (fp1);
fclose (fp2);
fclose (fp3);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-13 21:00:28 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-13 21:26:22 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-13 23:51:51 | 显示全部楼层

你的冒泡条件丢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-14 00:11:14 | 显示全部楼层

我遇到的问题有两个,一个是存放在ch3的时候,也就是31-38行的存入后输出的结果是:
to catch up
a moment
为啥多了回车T_T。
还有后面产生的新文件,运行之后得不到结果,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-14 06:42:10 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jhq999 于 2021-8-14 06:55 编辑

我是用vs2012写的打开文件的函数不一样,但意思一样,你要是复制的话,把打开文件那3段修改一下.
void main ()
{

        FILE *fp1,*fp2,*fp3;
        char ch1,ch2,ch3[50];
        int i=0,j,temp;
        if(fopen_s(&fp1,"e:\\a.txt","r"))
        {
                printf("not been found !");
                return;
        }
        if(fopen_s(&fp2,"e:\\b.txt","r"))
        {
                printf("not been found !");
                return;
        }
        if(fopen_s(&fp3,"e:\\c.txt","w"))
        {
                printf("not been found !");
                return;
        }
        ch1=fgetc(fp1);
        while(ch1!=EOF)
        {  
                ch3[ i++]=ch1;
                ch1=fgetc(fp1);
        }                       //将ch1的值存入数组ch3。
        ch2=fgetc(fp2);
        while(ch2!=EOF)
        {
                ch3[i]=ch2;
                i++;
                ch2=fgetc(fp2);
        }                      //将ch2的值存入数组ch3。
        ch3[i]='\0';          
        for(j=0;ch3[j];j++)
        {
                printf("%c",ch3[j]);
        }
        for(i=0;ch3[i+1];i++)//////////////////////ch3[j]换成ch3[i+1],用ch3[j],i=1时j已经循环到‘\0’了ch3[j]已经是0,退出循环。
        {
                for(j=i+1;ch3[j];j++)
                {
                        if(ch3[i]>ch3[j])
                        {
                                temp=ch3[i];
                                ch3[i]=ch3[j];
                                ch3[j]=temp;
                        }
                }
        }                   //冒泡法排序。
        for(i=0;ch3[i];i++)///////////////////ch3[j]换成ch3[i],和上面说明一样ch3[j]已经是0,直接啥也没写。
        {

                fputc(ch3[i],fp3);///////////////ch3[j]换成ch3[i]ch3[j]就是0,只在c.txt里写了一个'\0'

        }               
        fclose (fp1);
        fclose (fp2);
        fclose (fp3);

        getchar();
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-8-14 16:12:28 | 显示全部楼层
jhq999 发表于 2021-8-14 06:42
我是用vs2012写的打开文件的函数不一样,但意思一样,你要是复制的话,把打开文件那3段修改一下.

牛哇牛哇,谢谢兄弟
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 01:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表