首页 > 代码库 > 同时实现两个文件的内容
同时实现两个文件的内容
字面上很容易理解,两个文件的内容在同一个水平画面上。文件1占1-30列,然后中间20列用空格隔开,文件2占剩下的30列。
下面我说下我的思路:
比如说规定两篇文章水平的长度为80,文件1先输入1-30个字符(输够的话就用空格符来顶替),然后在用20个空格副隔开,接着再输入文件2的内容30个字符(输够的话也用空格补充),这样就完成了一行的输入。这么想就简单了,两个循环,先外循环输入一行,再内循环输入80个字符。行数是不确定的,因为不知道文件的内容(就算知道了计算也很麻烦),但是列数是确定的,就80,不多不少。那么怎么才算结束输入行退出呢?那就是两个文件的内容都输入完毕的时候。因为有可能文件1输入完毕,但是文件2还没有输完,也可能反过来。值得注意的是文件结束符EOF和换行符‘\n‘,因为这也是决定了什么时候用空格补充来补够字符数。
下面给出我实现的代码:
1 /* 同时打开两个文件 */ 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 #define MAX 80 6 7 void Readline(FILE *fp1, FILE *fp2); 8 9 int main(void)10 {11 FILE *f1, *f2;12 char filename[256];13 14 printf("请输入文件1的名字:");15 scanf(" %s", filename);16 17 if ((f1 = fopen(filename, "r")) == NULL)18 {19 perror("cannot read");20 exit(1);21 }22 23 printf("请输入文件2的名字:");24 scanf(" %s", filename);25 26 if ((f2 = fopen(filename, "r")) == NULL)27 {28 perror("cannot read");29 exit(1);30 }31 32 Readline(f1, f2); /* 分栏函数 */33 34 fclose(f1);35 fclose(f2);36 return 0;37 }38 39 40 41 42 void Readline(FILE *fp1, FILE *fp2)43 {44 int count; /* 用来表示列数 */45 char ch1 ,ch2;46 47 ch1 = fgetc(fp1);48 ch2 = fgetc(fp2);49 while (1)50 {51 for (count = 1; count <= MAX; count++) /* 每一列都显示,没有的就显示空格 */52 {53 if (count >= 1 && count <= 30) /* 文件1所占的范围 */54 {55 if ((ch1 == EOF) || (ch1 == ‘\n‘))56 {57 fprintf(stdout, "%c", ‘ ‘);58 }59 else60 {61 fprintf(stdout, "%c", ch1);62 ch1 = fgetc(fp1);63 }64 }65 if (count > 30 && count <= 50) /* 中间就用空格隔开两个文件的内容 */ 66 {67 fprintf(stdout, "%c", ‘ ‘);68 }69 70 71 if (count > 50 && count <= MAX) /* 文件2所占的范围 */72 {73 if ((ch2 == EOF) || (ch2 == ‘\n‘))74 {75 fprintf(stdout, "%c", ‘ ‘);76 }77 else78 {79 fprintf(stdout, "%c", ch2);80 ch2 = fgetc(fp2);81 }82 }83 84 }85 86 if (ch1 == ‘\n‘) /* 如果ch1是换行符时,要是不获取下一个字符,则将会一直输出空格 */87 ch1 = fgetc(fp1);88 if (ch2 == ‘\n‘)89 ch2 = fgetc(fp2); /* ch2也是一样,两者不能合并在一起,因为这是独立的 */90 91 fprintf(stdout, "%c", ‘\n‘);92 if ((ch1 == EOF) & (ch2 == EOF)) /* 退出条件 */93 break;94 }95 }
再用两个测试文件来打开,输出在终端,你也可以修改输出到文件中。下面给出结果:
其实道理很简单,但一定要注意换行符的问题。我就试过每一行就吞了一个字母,那是因为换行获取一个字符时在下一次输出的时候又获取了字符,就覆盖了。只有在该换行的时候才能执行那个获取下一字符的表达式。
可以改进的地方:这个程序只支持ascll码,要是汉字的话就会出现乱码,因为汉字好像是占两个字节的吧。还有,可以在程序的后面加一个计数,计算每一行共由多少个除空格以外的字符。
本人新手,说错的地方望指出,谢谢。
同时实现两个文件的内容
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。