#include <stdio.h>
#include <stdlib.h>
#define PAGELEN 24
#define LINELEN 512
void do_more(FILE*);
int see_more();
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;
}
分析上述代码的不足:
从上述代码可以知道,若没有命令行参数,则会从标准输入读取数据。