C语言数据结构之文本格式化问题
第一次做课程设计,现在遇到了一些问题,想请高手指点一下,下面的程序在主函数getch()那边出错了,搞了好久还是不知道怎么修改,请大侠棒棒忙 指点指点迷津!
[code=C/C++][/code]
#include<stdio.h>
#include<stdlib.h>
int pl=20,pw=80,lm=1,hl=3,fl=3,spn=1;//设置页长为20,页宽为80,坐空白行为1,头长为3,脚长为3,起始页为1
main()
{
void operation(void);//声明一个operation无参数无返回值的函数
operation();
printf("The TXT has been edited,please check it in the new txt named new.txt");
getchar();
getchar();
}
void operation(void)
{
FILE *fp,*pf,*panduan; //声明3个指针,指向文件类型
int pli=1,pwi=1,lmi=1,spni=1,i,j=0,k=0,sp1,sp2,l=0,m=0,n=0;
char ch,hc;
if(!(fp=fopen("c:\\doc.txt","r")))//无法以只读的方式打开c盘的doc.txt文件,则报错!
{
printf("intput ERROR!");
exit(1);
}
if(!(pf=fopen("f:\\new.txt","w")))
{
printf("input ERROR!");
exit(1);
}
if(!(panduan=fopen("f:\\doc.txt","r")))
{
printf("intput ERROR!");
exit(1);
}
fflush(stdin);//清空输入缓冲区
ch=fgetc(fp);//读出指针fp,赋给ch
fflush(stdin);//清空输入缓冲区
hc=fgetc(panduan); //读出指针panduan,赋给hc
/*******如果hc等于空格,未到文件尾部,等于33,44,46,58,59,63执行循环*****/
while(hc!=' '&&hc!=EOF&&hc!=33&&hc!=44&&hc!=46&&hc!=58&&hc!=59&&hc!=63)
{
fflush(stdin);//重新读入指针panduan里面的文件
hc=fgetc(panduan);
m++;
}
/******读出文件到尾部******/
while(ch!=EOF)
{
if(m==n)
{
fflush(stdin);
hc=fgetc(panduan);
m++;
while(hc!=' '&&hc!=EOF&&hc!=33&&hc!=44&&hc!=46&&hc!=58&&hc!=59&&hc!=63)
{
fflush(stdin);
hc=fgetc(panduan);
l++;
m++;
}
if((l+pwi)>pw)//页宽加1大于页式子
{
pwi=1; //页宽为1
pli++;//页长加1
fputc('\n',pf);//换行
fputc(' ',pf);//空格
}
l=0;
}
if(pli>=18)//页长大于等于18行
{
fputc('\n',pf); //换行
for(i=0;i<pw/2-1;i++)
fputc(' ',pf);
sp1=spni/10;
sp2=spni%10;
fputc(sp1+48,pf);
fputc(sp2+48,pf);
fputc('\n',pf);
fputc('\n',pf);
pli=1,pwi=1,spni++;
k=1;
}
if(pli==1)
{
//每页页项所空行数为3
for(i=0;i<3;i++)
fputc('\n',pf);
pli=hl+1;
//段首缩进8个字符的位置
for(i=0;i<8+lm;i++)
fputc(' ',pf);
pwi=9;
}
if(ch=='@'&&k==0)//ch等于@,k=0
{
fputc('\n',pf);
pli++;//页长自增1;
for(i=0;i<lm+8;i++)//段首缩进8个字符
fputc(' ',pf);
pwi=9;
}
if(ch==' '&&k==0)//如果ch空格,k=0
{
if(j==0)
fputc(ch,pf);//输出文本,页宽+1
j=1;
pwi++;
}
else
{
if(ch!='\r'&&k==0) //若ch不为只读并k=0
fputc(ch,pf); //输出文本
/***********若ch=33或者44或者58或者63,k=0**********/
if((ch==33||ch==44||ch==46||ch==58||ch==59||ch==63)&&k==0)
fputc(' ',pf);//输出空格然后页宽自增1
j=0;
pwi++;
}
if(pwi==pw&&k==0) //页宽若为80,k=0,则换行,页长自增1
{
pwi=1;
pli++;
fputc('\n',pf);
for(i=0;i<lm;i++) //左边空一格
fputc(' ',pf);
}
if(k==0) //k=0就清空缓冲区,重新读fp的内容
{
fflush(stdin);
ch=fgetc(fp);
n++;
}
k=0;
}
/***关闭fp,pf,panduan等指针操作**/
fclose(fp);
fclose(pf);
fclose(panduan);
}
[解决办法]
if(!(fp=fopen("c:\\\\doc.txt","r")))//无法以只读的方式打开c盘的doc.txt文件,则报错! {
[解决办法]
r的话,就是说以只读方式打开,但这里也必须保证文件存在。
我刚才给你调了一下,可以通过,而且可以读取,你的错误应该就是文件不存在。