鱼C论坛

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

[已解决]c语言 文件

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

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

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

x
  1. /****有两个磁盘文件a.txt文件内容为(to catch up)和b.txt文件内容为(a moment),要求合并两个文件,
  2. 产生一个新文件,新文件的内容是按字母顺序。即文件内容为:aaccehmmnooptttu*******/
  3. #include "stdio.h"
  4. #include "stdlib.h"
  5. void main ()
  6. {
  7.         FILE *fp1,*fp2,*fp3;
  8.         char ch1,ch2,ch3[50];
  9.         int i=0,j,temp;
  10.         if(!(fp1=fopen("d:\\exe\\a.txt","r")))
  11.              {
  12.                 printf("not been found !");
  13.                 exit(0);
  14.              }
  15.         if(!(fp2=fopen("d:\\exe\\b.txt","r")))
  16.              {
  17.                 printf("not been found !");
  18.                 exit(0);
  19.              }
  20.                 if(!(fp3=fopen("d:\\exe\\c.txt","w")))
  21.             {
  22.                 printf("not been found !");
  23.                 exit(0);
  24.                 }
  25.                 ch1=fgetc(fp1);
  26.                 while(ch1!=EOF)
  27.                 {  
  28.                         ch3[ i++]=ch1;
  29.                 ch1=fgetc(fp1);
  30.                 }                       //将ch1的值存入数组ch3。
  31.                 ch2=fgetc(fp2);
  32.                 while(ch2!=EOF)
  33.                 {
  34.                 ch3[i]=ch2;
  35.                 i++;
  36.                 ch2=fgetc(fp2);
  37.                 }                      //将ch2的值存入数组ch3。
  38.                 ch3[i]='\0';         
  39.                 for(j=0;ch3[j];j++)
  40.                 {
  41.                 printf("%c",ch3[j]);
  42.                 }
  43.                 for(i=0;ch3[j];i++)
  44.                 {
  45.         for(j=i+1;ch3[j];j++)
  46.                         {
  47.                         if(ch3[i]>ch3[j])
  48.                                 {
  49.                                 temp=ch3[i];
  50.                                 ch3[i]=ch3[j];
  51.                                 ch3[j]=temp;
  52.                                 }
  53.                         }
  54.                 }                   //冒泡法排序。
  55.                 for(i=0;ch3[j];i++)
  56.                 {
  57.                
  58.                         fputc(ch3[j],fp3);

  59.                 }               
  60. fclose (fp1);
  61. fclose (fp2);
  62. fclose (fp3);
  63. }
复制代码

最佳答案
2021-8-14 06:42:10
本帖最后由 jhq999 于 2021-8-14 06:55 编辑

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

  3.         FILE *fp1,*fp2,*fp3;
  4.         char ch1,ch2,ch3[50];
  5.         int i=0,j,temp;
  6.         if(fopen_s(&fp1,"e:\\a.txt","r"))
  7.         {
  8.                 printf("not been found !");
  9.                 return;
  10.         }
  11.         if(fopen_s(&fp2,"e:\\b.txt","r"))
  12.         {
  13.                 printf("not been found !");
  14.                 return;
  15.         }
  16.         if(fopen_s(&fp3,"e:\\c.txt","w"))
  17.         {
  18.                 printf("not been found !");
  19.                 return;
  20.         }
  21.         ch1=fgetc(fp1);
  22.         while(ch1!=EOF)
  23.         {  
  24.                 ch3[ i++]=ch1;
  25.                 ch1=fgetc(fp1);
  26.         }                       //将ch1的值存入数组ch3。
  27.         ch2=fgetc(fp2);
  28.         while(ch2!=EOF)
  29.         {
  30.                 ch3[i]=ch2;
  31.                 i++;
  32.                 ch2=fgetc(fp2);
  33.         }                      //将ch2的值存入数组ch3。
  34.         ch3[i]='\0';         
  35.         for(j=0;ch3[j];j++)
  36.         {
  37.                 printf("%c",ch3[j]);
  38.         }
  39.         for(i=0;ch3[i+1];i++)//////////////////////ch3[j]换成ch3[i+1],用ch3[j],i=1时j已经循环到‘\0’了ch3[j]已经是0,退出循环。
  40.         {
  41.                 for(j=i+1;ch3[j];j++)
  42.                 {
  43.                         if(ch3[i]>ch3[j])
  44.                         {
  45.                                 temp=ch3[i];
  46.                                 ch3[i]=ch3[j];
  47.                                 ch3[j]=temp;
  48.                         }
  49.                 }
  50.         }                   //冒泡法排序。
  51.         for(i=0;ch3[i];i++)///////////////////ch3[j]换成ch3[i],和上面说明一样ch3[j]已经是0,直接啥也没写。
  52.         {

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

  54.         }               
  55.         fclose (fp1);
  56.         fclose (fp2);
  57.         fclose (fp3);

  58.         getchar();
  59. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-8-13 20:52:23 | 显示全部楼层
本帖最后由 jhq999 于 2021-8-13 21:05 编辑
  1. /****有两个磁盘文件a.txt文件内容为(to catch up)和b.txt文件内容为(a moment),要求合并两个文件,
  2. 产生一个新文件,新文件的内容是按字母顺序。即文件内容为:aaccehmmnooptttu*******/
  3. #include "stdio.h"
  4. #include "stdlib.h"
  5. void main ()
  6. {
  7.         FILE *fp1,*fp2,*fp3;
  8.         char ch1,ch2,ch3[50];
  9.         int i=0,j,temp;
  10.         if(!(fp1=fopen("d:\\exe\\a.txt","r")))
  11.              {
  12.                 printf("not been found !");
  13.                 exit(0);
  14.              }
  15.         if(!(fp2=fopen("d:\\exe\\b.txt","r")))
  16.              {
  17.                 printf("not been found !");
  18.                 exit(0);
  19.              }
  20.                 if(!(fp3=fopen("d:\\exe\\c.txt","w")))
  21.             {
  22.                 printf("not been found !");
  23.                 exit(0);
  24.                 }
  25.                 ch1=fgetc(fp1);
  26.                 while(ch1!=EOF)
  27.                 {  
  28.                         ch3[ i++]=ch1;
  29.                 ch1=fgetc(fp1);
  30.                 }                       //将ch1的值存入数组ch3。
  31.                 ch2=fgetc(fp2);
  32.                 while(ch2!=EOF)
  33.                 {
  34.                 ch3[i]=ch2;
  35.                 i++;
  36.                 ch2=fgetc(fp2);
  37.                 }                      //将ch2的值存入数组ch3。
  38.                 ch3[i]='\0';         
  39.                 for(j=0;ch3[j];j++)
  40.                 {
  41.                 printf("%c",ch3[j]);
  42.                 }
  43.                 for(i=0;ch3[i+1];i++)/////////////////////////////////////////////////////////////////把ch3[j]替换成ch3[i+1],否则只能进行第一轮冒泡
  44.                 {
  45.         for(j=i+1;ch3[j];j++)
  46.                         {
  47.                         if(ch3[i]>ch3[j])
  48.                                 {
  49.                         
  50.                                 }
  51.                         }
  52.                 }                   //冒泡法排序。
  53.                 for(i=0;ch3[j];i++)
  54.                 {
  55.                
  56.                         fputc(ch3[j],fp3);

  57.                 }               
  58. fclose (fp1);
  59. fclose (fp2);
  60. fclose (fp3);
  61. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-13 21:00:28 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-8-13 21:26:22 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

你的冒泡条件丢了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

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

  3.         FILE *fp1,*fp2,*fp3;
  4.         char ch1,ch2,ch3[50];
  5.         int i=0,j,temp;
  6.         if(fopen_s(&fp1,"e:\\a.txt","r"))
  7.         {
  8.                 printf("not been found !");
  9.                 return;
  10.         }
  11.         if(fopen_s(&fp2,"e:\\b.txt","r"))
  12.         {
  13.                 printf("not been found !");
  14.                 return;
  15.         }
  16.         if(fopen_s(&fp3,"e:\\c.txt","w"))
  17.         {
  18.                 printf("not been found !");
  19.                 return;
  20.         }
  21.         ch1=fgetc(fp1);
  22.         while(ch1!=EOF)
  23.         {  
  24.                 ch3[ i++]=ch1;
  25.                 ch1=fgetc(fp1);
  26.         }                       //将ch1的值存入数组ch3。
  27.         ch2=fgetc(fp2);
  28.         while(ch2!=EOF)
  29.         {
  30.                 ch3[i]=ch2;
  31.                 i++;
  32.                 ch2=fgetc(fp2);
  33.         }                      //将ch2的值存入数组ch3。
  34.         ch3[i]='\0';         
  35.         for(j=0;ch3[j];j++)
  36.         {
  37.                 printf("%c",ch3[j]);
  38.         }
  39.         for(i=0;ch3[i+1];i++)//////////////////////ch3[j]换成ch3[i+1],用ch3[j],i=1时j已经循环到‘\0’了ch3[j]已经是0,退出循环。
  40.         {
  41.                 for(j=i+1;ch3[j];j++)
  42.                 {
  43.                         if(ch3[i]>ch3[j])
  44.                         {
  45.                                 temp=ch3[i];
  46.                                 ch3[i]=ch3[j];
  47.                                 ch3[j]=temp;
  48.                         }
  49.                 }
  50.         }                   //冒泡法排序。
  51.         for(i=0;ch3[i];i++)///////////////////ch3[j]换成ch3[i],和上面说明一样ch3[j]已经是0,直接啥也没写。
  52.         {

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

  54.         }               
  55.         fclose (fp1);
  56.         fclose (fp2);
  57.         fclose (fp3);

  58.         getchar();
  59. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

牛哇牛哇,谢谢兄弟
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 21:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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