编制一个程序,实现将两个文件的内容同时显示在屏幕上,并且最左边的第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(" ");
}
下面是程序的运行结果:
这个程序还是很好玩的,这里让我想到了实现一个比较简单的文本比较程序。下一篇博客我们来实现一个文本比较程序。