📄 2ex9.cpp
字号:
//第2章 习题9
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
int pro_process(int &,int,char *,int);
const int REC_LEN=128; //半区长度
void main() //测试驱动程序
{
int rec_no=0; //文件逻辑记录号
int buf_no=0; //半区号
char buf[REC_LEN*2]; //扫描缓冲区
int ReadIn; //从文件读入字符数
int str_len; //半区内实际字符数
while(1){
buf_no = (buf_no==1) ? 0 : 1; //半区互补轮流工作
//调用预处理函数,入口参数说明:
// 1.ReadIn为从文件读入字符数(传名)
// 2.buf_no为缓冲区号(传值)
// 3.buf为缓冲区首址(传地址)
// 4.rec_no为记录号(传值)
str_len=pro_process(ReadIn,buf_no,buf,rec_no);//返回值为半区内实际字符数
if(!ReadIn) break; //若读入字符数为0,表示文件已读完。
//显示缓冲区内容
cout<<"<半区号>:"<<buf_no<<endl;
for(int t = REC_LEN*buf_no;t < REC_LEN*buf_no+str_len ; t++)
cout<<buf[t]<<flush;
cout<<endl;
rec_no++; //逻辑记录号增1
}
}
//预处理程序
int pro_process(int &ReadIn,int buf_no,char *buf,int rec_no)
{
int str_len=0;char c;
ReadIn=0;
static bool in_comment=false; //false表示当前字符未处于注释中
ifstream cinf("source.txt");
cinf.seekg(rec_no*REC_LEN,ios::beg); //文件指针定位
while(cinf.read(&c,sizeof(c)) && ReadIn<REC_LEN){
ReadIn++;
if(c=='\n')ReadIn++; //实际上读入二个控制字符,'\r'被舍去。
switch(in_comment){
case false:
if(c=='{' ) //进入注释
in_comment=true;
else{
buf[buf_no*REC_LEN+str_len]=(c=='\n'||c=='\t')?' ':c;
str_len++;
break;
}
case true:
if(c=='}' ) //离开注释
in_comment=false;
}//end of switch
}//end of while
return str_len;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -