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

本文介绍了一个实用的程序,能够实现在屏幕上同时显示两个文件的内容。文件1的内容显示在屏幕的左半部分(第1-30列),文件2的内容显示在右半部分(第41-70列)。此外,程序还会在第75-76列显示当前行中两个文件字符总数,并在每输出20行后插入2行空白行。
摘要由CSDN通过智能技术生成

编制一个程序,实现将两个文件的内容同时显示在屏幕上,并且最左边的第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(FILE *fp,char *file);

/**
 * 编制一个程序,实现将两个文件的内容同时显示在屏幕上,并且最左边的第1-30列
 * 显示文件1的内容,右边第41-70列显示文件2的内容;第75-76列显示两文件该行字符
 * 总和,其余列显示空白符。另外,每输出20行内容后,另输出2行空行。
 */
int main()
{
    FILE *fp1;
    FILE *fp2;

    char fname1[20];  //文件1的名称
    char fname2[20];  //文件2的名称

    //统计文件行数
    int linecount = 0;

    //统计每行字符个数
    int countSize = 0;

    //判断是否循环
    int isRun = 1;

    //分别用于保存第一个文件和第二个文件读取的字符数
    int count1,count2;

    printf("Please enter the name of file1: ");
    scanf("%s",fname1);
    printf("Please enter the name of file2: ");
    scanf("%s",fname2);


    fp1 = fopen(fname1,"r");
    fp2 = fopen(fname2,"r");

    //循环输出文件内容
    while(isRun){

        count1 = readline(fp1,file1);
        count2 = readline(fp2,file2);

        if(count1 == 0 && count2 == 0)
            break;

        if(count1 == 0){
            printFirstSpace(0);
        }else{
            printf("%s",file1);
            printFirstSpace(count1);
        }

        if(count2 == 0){
            printSecondSpace(0);
        }else{
            printf("%s",file2);
            printSecondSpace(count2);
        }

        countSize = count1 + count2;
        printf("%d\n",count1+count2);

        linecount++;

        //每输出20行,打印2行空行
        if(linecount == 20){
            printf("\n");
            printf("\n");
            linecount = 0;
        }
    }

    fclose(fp1);
    fclose(fp2);


    return 0;
}

/**
 * 用于读取一行字符串,并返回读取的字符个数
 * @param
 *      fp   : 文件指针
 *      file : 保存读取的字符串
 */
int readline(FILE *fp,char *file){

    i = 0;
    int c;
    while((c = fgetc(fp)) != '\n'){
        //如果读取到文件末尾的时候,就返回0
        if(feof(fp))
            break;

        file[i] = c;
        i++;

        if(i == 30)
            break;
    }

    file[i] = '\0';

    return i;
}

/**
 * 该方法用于输出第一个空白部分
 * @param
 *      co1 : 第一个文件读取的字符个数
 */
void printFirstSpace(int co1)
{
    int spaces = 30 - co1 + 10;

    printSpaces(spaces);
}

/**
 * 该方法用于输出第二个空白部分
 * @param
 *      co2 : 第二个文件读取的字符个数
 */
void printSecondSpace(int co2)
{
    int spaces = 30 - co2 + 5;

    printSpaces(spaces);
}

/**
 * 该方法用于输出空白
 * @param
 *      spaced : 空白的个数
 */
void printSpaces(int spaces)
{
    for(i = 0;i < spaces;i++)
        printf(" ");
}

下面是程序的运行结果:

这里写图片描述

这个程序还是很好玩的,这里让我想到了实现一个比较简单的文本比较程序。下一篇博客我们来实现一个文本比较程序。

转载于:https://www.cnblogs.com/bobo1223/p/7287525.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值