天天看點

C實作兩個檔案的内容輸出到同一個螢幕

版權聲明:您好,轉載請留下本人部落格的位址,謝謝 https://blog.csdn.net/hongbochen1223/article/details/48244785

編制一個程式,實作将兩個檔案的内容同時顯示在螢幕上,并且最左邊的第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(" ");
}
           

下面是程式的運作結果:

這個程式還是很好玩的,這裡讓我想到了實作一個比較簡單的文本比較程式。下一篇部落格我們來實作一個文本比較程式。

繼續閱讀