版本1:more01.c
#include <stdio.h>
#include <stdlib.h>
#define PAGELEN 24
#define LINELEN 512
void do_more(FILE *);
int see_more();
//ac表示参数个数,av数组即参数数组(执行时more01本身是av[0])
int main(int ac,char *av[])
{
FILE *fp;
if(ac==1)
do_more(stdin);
else
while(--ac)
if((fp=fopen(*++av,"r"))!=NULL)
{
do_more(fp);
fclose(fp);
}
else
exit(1);
return 0;
}
void do_more(FILE *fp)
{
char line[LINELEN];
int num_of_lines=0;
int see_more(),reply;
while(fgets(line,LINELEN,fp))
{
if(num_of_lines==PAGELEN)
{
reply=see_more();
if(reply==0)
break;
num_of_lines -= reply;
}
if(fputs(line,stdout)==EOF)
exit(1);
num_of_lines++;
}
}
int see_more()
{
int c;
printf("\033[7m more? \033[m");
while((c=getchar())!=EOF)
{
if(c=='q')
return 0;
if(c==' ')
return PAGELEN;
if(c=='\n')
return 1;
}
return 0;
}
版本1存在的问题:
- 当屏幕上的文字上滚时,
more?
也会随之上滚。 - 当按空格或者‘q’键后,如果不按回车,程序不会响应。
- 不能计算显示的百分比。