編制一個程序,實現將兩個文件的內容同時顯示在屏幕上,並且最左邊的第1-30列 顯示文件1的內容,右邊第41-70列顯示文件2的內容;第75-76列顯示兩文件該行字符總和,其余列顯示空白符。另外,每輸出20行內容後,另輸出2行空行。
下面看一下我的函數實現:
#include
#include
#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
,count1+count2);
linecount++;
//每輸出20行,打印2行空行
if(linecount == 20){
printf(
);
printf(
);
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)) != '
'){
//如果讀取到文件末尾的時候,就返回0
if(feof(fp))
break;
file[i] = c;
i++;
if(i == 30)
break;
}
file[i] = '';
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( );
}
下面是程序的運行結果:
這個程序還是很好玩的,這裡讓我想到了實現一個比較簡單的文本比較程序。下一篇博客我們來實現一個文本比較程序。