怎么找到c语言编辑器里的错误,文本编辑器 网上找的 哪位大神看看能帮我找出错误 谢谢~...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#include

#include

#include

#define MAXLEN 80

#define MAXLINE 200

char buffer[MAXLEN],fname[120];

char *lineptr[MAXLINE];

FILE *fp;

void edit(),replace(),insert(),delete(),quit();

char comch[]="EeRrIiDdQq";/*命令符*/

void(*comfun[])()={edit,replace,insert,delete,quit};/*对应处理函数*/

int modified=0,/*正文被修改标志*/

last;/*当前正文行数*/

char *chpt;/*输入命令行字符指针*/

main()

{

int j;

last=0;

while(1)

{

printf("\nInput a command:[e,r,i,d,q].\n");

gets(buffer);/*读入命令行*/

for(chpt=buffer;*chpt==''||*chpt=='\t';chpt++);/*掠过空白符*/

if(*chpt=='\0') continue;/*空行重新输入*/

for(j=0;comch[j]!='\0'&&comch[j]!=*chpt;j++);/*查命令符*/

if(comch[j]=='\0') continue;/*非法命令符*/

chpt++;/*掠过命令符,指向参数*/

(*comfun[j/2])();/*执行对应函数*/

fprintf(stdout,"The text is:\n");

for(j=0;j

fputs(lineptr[j],stdout);

}

}

void quit()

{

int c;

if(modified)/* 如正文被修改 */

{

printf("Save? (y/n)");

while(!(((c=getchar())>='a'&&c<='z')||(c>='A'&&c<='Z')));

if(c=='y'||c=='Y')

save(fname); /* 保存被修改过的正文 */

}

for(c=0;c

free(lineptr[c]); /* 释放内存 */

exit(0);

}

void insert()

{

int k,m,i;

sscanf(chpt,"%d%d",&k,&m); /* 读入参数 */

if(m<0||m>last||last+k>=MAXLINE)/* 检查参数合理性 */

{

printf("Error!\n");

return;

}

for(i=last;i>m;i--)/* 后继行向后移 */

lineptr[i+k-1]=lineptr[i-1];

for(i=0;i

{

fgets(buffer,MAXLEN,stdin);

lineptr[m+i]=(char *)malloc(strlen(buffer)+1);

strcpy(lineptr[m+i],buffer);

}

last+=k; /* 修正正文行数 */

modified=1; /* 正文被修改 */

}

void delete()

{

int i,j,m,n;

sscanf(chpt,"%d%d",&m,&n); /* 读入参数 */

if(m<=0||m>last||n

{

printf("Error!\n");

return;

}

if(n>last)

n=last; /* 修正参数 */

for(i=m;i<=n;i++) /* 删除正文 */

free(lineptr[i-1]);

for(i=m,j=n+1;j<=last;i++,j++)

lineptr[i-1]=lineptr[j-1];

last=i-1; /* 修正正文行数 */

modified=1; /* 正文被修改 */

}

void replace()

{

int k,m,n,i,j;

sscanf(chpt,"%d%d%d",&k,&m,&n); /* 读入参数 */

if(m<=0||m>last||n=MAXLINE)/* 检查参数合理性 */

{

printf("Error!\n");

return;

}

/* 先完成删除 */

if(n>last)

n=last; /* 修正参数 */

for(i=m;i<=n;i++) /* 删除正文 */

free(lineptr[i-1]);

for(i=m,j=n+1;j<=last;i++,j++)

lineptr[i-1]=lineptr[j-1];

last=i-1;

/* 以下完成插入 */

for(i=last;i>=m;i--)

lineptr[i+k-1]=lineptr[i-1];

for(i=0;i

{

fgets(buffer,MAXLEN,stdin);

lineptr[m+i-1]=(char *)malloc(strlen(buffer)+1);

strcpy(lineptr[m+i-1],buffer);

}

last+=k; /* 修正正文行数 */

modified=1; /* 正文被修改 */

}

save(char *fname) /* 保存文件 */

{

int i;

FILE *fp;

if((fp=fopen(fname,"w"))==NULL)

{

fprintf(stderr,"Can't open %s.\n",fname);

exit(1);

}

for(i=0;i

{

fputs(lineptr[i],fp);

free(lineptr[i]);

}

fclose(fp);

}

void edit() /* 编辑命令 */

{

int i;

FILE *fp;

i=sscanf(chpt,"%s",fname); /* 读入文件名 */

if(i!=1)

{

printf("Enter file name.\n");

scanf("%s",fname);

}

if((fp=fopen(fname,"r"))==NULL) /* 读打开 */

{

fp=fopen(fname,"w"); /* 如不存在,则创建文件 */

fclose(fp);

fp=fopen(fname,"r"); /* 重新读打开 */

}

i=0;

while(fgets(buffer,MAXLEN,fp)==buffer)

{

lineptr[i]=(char *)malloc(strlen(buffer)+1);

strcpy(lineptr[i++],buffer);

}

fclose(fp);

last=i;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值