不完全的more

该C程序定义了两个常量LINELEN和PAGELEN,用于控制每行长度和每页行数。do_more函数读取文件或标准输入并分页显示内容,see_more函数处理用户输入,决定是否继续显示下一页。当用户输入q时,程序终止;输入换行符时,显示下一页;输入空格时,显示整页。
摘要由CSDN通过智能技术生成
#include<stdio.h>
#define LINELEN 512
#define PAGELEN 24
void do_more(FILE*);
int see_more();
int main(int ac,char* av[])
{
  FILE* fp;
  if(ac==1){
    do_more(stdin);
  }
  if((fp=fopen(*++av,"r"))!=NULL){
    do_more(fp);
    fclose(fp);
  }
  return 0;
}

void do_more(FILE* fp)
{
  char line[LINELEN];
  int reply=0;
  int num_of_lines=0;
  while(fgets(line,LINELEN,fp)!=NULL){
    fputs(line,stdout);
    if(num_of_lines==PAGELEN){
      reply=see_more();
      if(reply==0){
        break;
      }else{
        num_of_lines-=reply;
      }
    }
    num_of_lines++;
  }
}

int see_more()
{
  int c;
  printf("more ?");
  FILE* fin;
  if((fin=fopen("/dev/tty","r"))!=NULL){
    while((c=fgetc(fin))!=EOF){
      if(c=='q'){
        return 0;
      }
      if(c=='\n'){
        return 1;
      }
      if(c==' '){
        return PAGELEN;
      }
    }
  }
  fclose(fin);
  return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值