C语言实例:同时实现两个文件的内容

字面上很容易理解,两个文件的内容在同一个水平画面上。文件1占1-30列,然后中间20列用空格隔开,文件2占剩下的30列。

下面我说下我的思路:

比如说规定两篇文章水平的长度为80,文件1先输入1-30个字符(输够的话就用空格符来顶替),然后在用20个空格副隔开,接着再输入文件2的内容30个字符(输够的话也用空格补充),这样就完成了一行的输入。这么想就简单了,两个循环,先外循环输入一行,再内循环输入80个字符。行数是不确定的,因为不知道文件的内容(就算知道了计算也很麻烦),但是列数是确定的,就80,不多不少。那么怎么才算结束输入行退出呢?那就是两个文件的内容都输入完毕的时候。因为有可能文件1输入完毕,但是文件2还没有输完,也可能反过来。值得注意的是文件结束符EOF和换行符'\n',因为这也是决定了什么时候用空格补充来补够字符数。

下面给出我实现的代码:

/* 同时打开两个文件 */
#include <stdio.h>
#include <stdlib.h>

#define MAX    80

void Readline(FILE *fp1, FILE *fp2);

int main(void)
{
    FILE    *f1, *f2;
    char    filename[256];
   
    printf("请输入文件1的名字:");
    scanf(" %s", filename);

if ((f1 = fopen(filename, "r")) == NULL)
    {
        perror("cannot read");
        exit(1);
    }

printf("请输入文件2的名字:");
    scanf(" %s", filename);

if ((f2 = fopen(filename, "r")) == NULL)
    {
        perror("cannot read");
        exit(1);
    }

Readline(f1, f2);    /* 分栏函数 */

fclose(f1);
    fclose(f2);
    return 0;
}


void Readline(FILE *fp1, FILE *fp2)
{
    int    count;    /* 用来表示列数 */
    char    ch1 ,ch2;

ch1 = fgetc(fp1);
    ch2 = fgetc(fp2);
    while (1)
    {
        for (count = 1; count <= MAX; count++)        /* 每一列都显示,没有的就显示空格 */
        {
            if (count >= 1 && count <= 30)        /* 文件1所占的范围 */
            {
                if ((ch1 == EOF) || (ch1 == '\n'))
                {
                    fprintf(stdout, "%c", ' ');
                }
                else
                {
                    fprintf(stdout, "%c", ch1);
                    ch1 = fgetc(fp1);
                }
            }
            if (count > 30 && count <= 50)        /* 中间就用空格隔开两个文件的内容 */       
            {
                fprintf(stdout, "%c", ' ');
            }
           

if (count > 50 && count <= MAX)        /* 文件2所占的范围 */
            {
                if ((ch2 == EOF) || (ch2 == '\n'))
                {
                    fprintf(stdout, "%c", ' ');
                }
                else
                {
                    fprintf(stdout, "%c", ch2);
                    ch2 = fgetc(fp2);
                }
            }

}

if (ch1 == '\n')        /* 如果ch1是换行符时,要是不获取下一个字符,则将会一直输出空格 */
            ch1 = fgetc(fp1);
        if (ch2 == '\n')
            ch2 = fgetc(fp2);    /* ch2也是一样,两者不能合并在一起,因为这是独立的 */

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/155072bcaefdba72d6de6471b2518a37.html