同时实现两个文件的内容

字面上很容易理解,两个文件的内容在同一个水平画面上。文件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                 else
60                 {
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                 else
78                 {
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码,要是汉字的话就会出现乱码,因为汉字好像是占两个字节的吧。还有,可以在程序的后面加一个计数,计算每一行共由多少个除空格以外的字符。

本人新手,说错的地方望指出,谢谢。

时间: 2024-10-05 04:09:36

同时实现两个文件的内容的相关文章

C实现两个文件的内容输出到同一个屏幕

编制一个程序,实现将两个文件的内容同时显示在屏幕上,并且最左边的第1-30列 显示文件1的内容,右边第41-70列显示文件2的内容:第75-76列显示两文件该行字符总和,其余列显示空白符.另外,每输出20行内容后,另输出2行空行. 下面看一下我的函数实现: #include <stdio.h> #include <stdlib.h> #define size 31 char file1[size]; char file2[size]; int i; int readline(FIL

使用Vim比较两个文件的内容

原文地址:http://blog.chinaunix.net/uid-22548820-id-3477464.html 1. 使用vim的比较模式打开两个文件: vim -d file1 file2 或 vimdiff file1 file2 2. 如果已经打开了文件file1,再打开另一个文件file2进行比较: :vert diffsplit file2 如果没有用vert命令,diffsplit则会分上下两个窗口. 3. 如果已经用split方式打开了两个文件file1,file2,又想比

【转载】vim 比较两个文件的内容

1. 使用vim的比较模式打开两个文件: vim -d file1 file2 或 vimdiff file1 file2 2. 如果已经打开了文件file1,再打开另一个文件file2进行比较: :vert diffsplit file2 如果没有用vert命令,diffsplit则会分上下两个窗口. 3. 如果已经用split方式打开了两个文件file1,file2,又想比较两文件的不同. 分别在两个窗口里面输入命令: :diffthis 4. 如果更改了某个窗口的内容,vim又没有自动更新

用python比较两个文件中内容的不同之处, 并输出行号和内容.

代码部分: '''cmpfile.py - 比对两个文件, 如果有不同之处, 打印内容和行号''' import os class cmpFile: def __init__(self, file1, file2): self.file1 = file1 self.file2 = file2 def fileExists(self): if os.path.exists(self.file1) and os.path.exists(self.file2): return True else: r

比较两个文件内容是否相同

/* 判断两个文件的内容是否相同,文件名要用绝对路径 * @param fileName1 :文件1的绝对路径 * @param fileName2 :文件2的绝对路径 * @return 相同返回true,不相同返回false */ public boolean isSameFile(String fileName1,String fileName2){ FileInputStream fis1 = null; FileInputStream fis2 = null; try { fis1 =

linux比较两个文件的不同(6/21)

cmp 命令:比较任意两个类型的文件,且吧结果输出到标准输出,默认文件相同不输出,不同的文件输出差异 必要参数 -c 显示不同的信息-l 列出所有的不同信息-s 错误信息不提示 选择参数 -i<字符数> 指定字符数目-v 显示版本信息--help 显示帮助信息 [函数的返回值] 0 :文件时同样的1 :文件是不同的>1:发生错误 comm将逐行比较已经排序的两个文件.显示结果包括3列: 第1列为只在file1中找到的行;第2列为只在file2中找到的行;第3列为两个文件的公用行. 参数

diff - 找出两个文件的不同点

总览 diff [选项] 源文件 目标文件 描述 在最简单的情况是, diff 比较两个文件的内容 (源文件 和 目标文件). 文件名可以是 - 由标准输入设备读入的文本. 作为特别的情况是, diff - - 比较一份标准输入的它自己的拷贝如果 源文件 是一个目录和 目标文件 不是(目录), diff 会比较在 源文件(目录) 里的文件的中和 目标文件同名的(文件), 反过来也一样. 非目录文件不能是 -. 如果 源文件 和 目标文件 都是目录, diff 比较两个目录中相应的文件,依照字母次

Path,Files巩固,题目:从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中

这个题目用传统的File,InputStream可以做,但是如果用Files,Path类做,虽然思路上会困难一些,但是代码简洁了很多,以下是代码: import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.Simple

每日一题--4--在两个文件中取交集,显示指定的内容

把这个两个文件都存在的用户的密码输出出来 [[email protected] student]# head file1 file2 ==> file1 <== oldboy 1234 alex 4567 lidao 9999 ==> file2 <== 001 lidao 002 alex 003 oldboy 004 oldgirl 提示:需要用到如何判断这两个文件不是一个文件. 解题思路 awk 'FNR==NR{h[$1]=$2}FNR!=NR{print h[$2]}'