#include
#include
#include
int(PageLength)=56; //页长(一页最大的行数)
int PageWedth=60; //页宽(一行最大的字符数)
int LeftMargin=10; //左空白(一行开始输出的空格数)
int HeadingLength=5; //头长(一页开始输出的空行数)
int FootingLength=5; //脚长(每页最后空5行)
int StaringPageNumber=1; //起始页号
int page=1; //记录页数
int i=0; //循环变量
char a[5]; //记录page的char类型
char * aIndex=a; //数组a的首地址
//函数声明(后面的函数调用了它)
void linageFull(FILE * fp2,int * linage,int * columns,int * page);
//函数1:
void printOut() //输出头文件中的所有整形变量
{
//这个函数中的参数全部来自头文件
printf("\n");
printf(" 格式化文本文件结束\n");
printf("版面的参数如下: \n");
printf("页长: %d\n",PageLength);
printf("页宽: %d\n",PageWedth);
printf("左空白: %d\n",LeftMargin);
printf("头长: %d\n",HeadingLength);
printf("脚长: %d\n",FootingLength);
printf("起始页号: %d\n",StaringPageNumber);
printf("\n");
printf(" 特别说明: 本程序只支持英文格式化,对于中文格式化存在乱码问题。 \n");
printf("\n");
}
//函数2:
void writeOut(FILE * fp2,char c1)// 输出到文本文件2和屏幕
{
char ch1;
ch1=fputc(c1,fp2);//接受从文本文件1中读出的一个字符,并且保存到文本文件2中
printf("%c",ch1); //把这个字符输出到外设(屏幕)
}
//函数3:
int zuokongbai(FILE * fp2) // 左空白
{
for(i=0;i<10;i++)
writeOut(fp2,' '); //循环10次,输出10个空格到文本文件2中
return i;
}
//函数4:
void pageNumber(FILE * fp2,char * aImdex,int * page) //输出当前页码
{
int m,n; //定义2个整形变量接收page和page%10的值
m=*page; //接收page的值
int i=0;
while(m!=0)//判断条件为:m的值不为0即page的值不为0
{
n=m% 10;
*(aIndex+i)=n+'0'; //对数组a进行赋值操作,把int类型的page的各位数转换为字符型保存到数组a中,以便于向文本文件2中输出page
i++;
m=m/10;
}
//此时page已经保存在数组a中了,开始输出page
for(i=i-1;i>=0;i--)
{
writeOut(fp2,*(aIndex+i)); //向文本文件2中输出page
}
(*page)++; //指向下一页
}
//函数5:
void out(int * columns,char * array,int * linage,FILE * fp2,int * page,int * size)//输出
{
if(((*(columns))+1+strlen(array))>60)//判断这一行是否还能够输出空格加一个单词
{
//这一行不能再输出了,开始换行
if((*(linage))>50) //判断这一页是否已经印满
{
linageFull(fp2,linage,columns,page); //转到下一页
for(i=0;i<*(size);i++)
{
writeOut(fp2,*(array+i));//把保存在数组中的一个字输出到文本文件2中
(*(columns))++;//输出一个字符,这一行的字符数就增加一个
}
(*(size))=0;//输出之后就开始重新向数组array中读入字符,所以size要归0
(*(array))='\0';//如果是多个空格连在一起,那么就需要把array数组第一个设为结束字符。
}
else //这一页还没印满,换行后开始输出
{
writeOut(fp2,'\n');//换行
(*(linage))++;
//*(columns)=0;
(*(columns))=zuokongbai(fp2); // 左空白10
for(i=0;i<(*(size));i++)
{
writeOut(fp2,(*(array+i)));//通过循环向文本文件2中输入字
(*(columns))++;
}
(*(size))=0;
(*(array))='\0';
}
}
else //这一行还没有满,还可以再输出
{
writeOut(fp2,' ');
(*(columns))++;
for(i=0;i<*size;i++)
{
writeOut(fp2,*(array+i));
(*(columns))++;
}
(*(size))=0;
(*(array))='\0';
}
}
//函数6
void linageFull(FILE *fp2,int *linage,int *columns,int *page) //开始打印下一页
{
//完成页的尾部格式(空一行后居中输出页码page再空3行)
writeOut(fp2,'\n'); //空一行
for(i=0;i<29;i++) //居中输出页码
{
writeOut(fp2,' ');
}
pageNumber(fp2,aIndex,page);
for(i=0;i<3;i++)
{
writeOut(fp2,'\n'); //再空3行
}
*linage=0;
//开始打印第二页。实现输出页首的格式(头长+坐空白)
for(i=0;i<5;i++) //头长5
{
writeOut(fp2,'\n');
*linage++; // 已经占有linage行
}
*columns=zuokongbai(fp2); //左空白10
}
//函数7
void readIn(FILE *fp1,FILE *fp2)
{
int blankNumber=0; //读入文本文件
int linage=0; //记录行数
int columns=0; //记录单行的字节数
char array[61]={"\n"}; //存一个单词
char *arrayIndex=array;
int size=0; //初始化单词的长度
for(i=0;i<5;i++) //头长5
{
writeOut(fp2,'\n');
linage++; //已经占有linage行
}
columns=zuokongbai(fp2);
for(i=0;i<7;i++) //段首缩进8字节
{
writeOut(fp2,' ');
columns++;
}
//以上代码实现了基本的版面参数要求,下面是具体到字母的排版
char cl;
cl=fgetc(fp1); //读入第一个字符
while(cl!=EOF) //如果读到结尾了,退出这个函数。否则开始字符的输入输出操作
{
if(cl==' ') //如果字符为空格
{
if(strlen(array)==0) //判断空格前是否有一个字
; //没有字不打印
else //有一个字
{
out(&columns,array,&linage,fp2,&page,&size);
}
}
else if(cl=='@')
{
if(strlen(array)==0) //判断‘@’字符前是否有一个字
; //没有字不打印
else
{
out(&columns,array,&linage,fp2,&page,&size);
}
if(linage>50) //判断这一页是否已经印满
{
linageFull(fp2,&linage,&columns,&page);
for(i=0;i<7;i++) //手段缩进8字符
{
writeOut(fp2,' ');
columns++;
}
}
else //这一页没有印满
{
writeOut(fp2,'\n');
linage++;
columns=0;
columns=zuokongbai(fp2);
for(i=0;i<7;i++)
{
writeOut(fp2,' ');
columns++;
}
}
}
else
{
array[size]=cl;
size++;
array[size]='\0';
}
cl=fgetc(fp1);
if(cl==EOF)
{
out(&columns,array,&linage,fp2,&page,&size);
break;
}
if(strlen(array)>61)
{
printf("字符格式错误!哪有这么长的单词!\n");
break;
}
}
}
//函数8
int main()
{
FILE *fp1,*fp2; //fp1 指向读入的文本文件,p2 指向输出的文本文件保存要格式化文本文件的文件名
char fileName_one[100]; //保存格式化之后输出文本文件的文件名
char fileName_two[100];
printf("请输入要格式化文件的文件名(包括后缀名):\n");
gets(fileName_one);
if((fp1=fopen(fileName_one,"r"))=NULL)
{
printf("The file\"%s\"was not fopen!\n",fileName_one);
exit(0);
}
//得到要进行格式化的文本文件1的地址
printf("请输入输出文件的文件名(包括后缀名):\n");
gets(fileName_two);
if((fp2=fopen(fileName_two,"a"))==NULL)
{
printf("The file\"%s\" was not fopen!\n",fileName_two);
exit(0);
}
//得到格式化后要保存到文本文件 2的地址
readIn(fp1,fp2);//读入文本文件开始格式化
printOut();
fclose(fp1);
fclose(fp2);
}
你这前3个include后面啥都没跟,就算写的是hallo world也运行不了呀