当前位置:文档之家› 第8章 数据流与文件的输入输出

第8章 数据流与文件的输入输出

setiosflags(ios::scientific)设置了指数表示方式。
setprecisionБайду номын сангаас3)和setiosflags(ios::fixed)共同设置了浮点数表示方式。
例题2:已知int a, *pa=&a;输出指针pa十进制的地址值的方法是()。
A.cout<<pa;B.cout<<*pa;
cout<<buf<<endl;
i++;
}
}
bool getnum(char *s)
{bool found(false);
char ch;
while(cin.get(ch)&&!isdigit(ch)) ;
if(!cin)return false;
do{
*s++=ch;
}while(cin.get(ch)&&isdigit(ch));
cout<<setiosflags(ios::scientific);
cout<< number2<<endl;
cout<<setprecision(5);
cout<<setiosflags(ios::fixed);
cout<< number2<<endl;
}
运行结果:
Decimal:15
Hexadecimal:f
例题3:关于read()函数的下列描述中,()是对的。
A.A.函数只能从键盘输入中获取字符串
B.B.函数所获取的字符多少是不受限制的
C.C.该函数只能用于文本文件的操作中
D.D.该函数只能按规定读取所指定的字符数
答案:D
分析:read成员函数的使用格式是:read(char *buf,int size);
结果第5行没有设置有效位数,按流的默认值6位输出3.14159。
setprecision(3)控制符设置了3位有效位数,输出3.14。
setw(15)控制符设置了域宽为15,只影响下一个值的输出。
setiosflags(ios::left)设置了左对齐方式;
setiosflags(ios::right)设置了右对齐方式。
(2)向字符文件写入数据向字符文件写入数据有2种方法。
1)调用从ostream流类中继承来的插入操作重载函数。使用方法同交互输出过程,但这时插入操作符的第一个操作数应是某个定义过的文件对象而不是cout。
(3)从字符文件读取数据到内存变量从打开的字符文件中输入数据到内存变量有3种方法。
10.对字节文件(二进制文件)的操作
(3)不清楚如何用重载后的插入符与提取符进行输入/输出。
例题6:从输入流中分析出数字串。例如:设输入串为
A012BCD378 274D<CR>
EF55G^Z<CR>
则输出为:
Digit string 1 is: 012
Digit string 2 is: 378
Digit string 3 is: 274
(3)访问二进制文件和read()成员函数
从字节文件读数据,就是把具有一定字节数的内容原原本本地复制到内存中由指定字符指针所指向的内存缓冲区中,所读内容是从当前文件指针所指位置开始读取,然后文件指针自动向后移动所读取内容的字节数。
11.随机访问文件
(1)随机访问文件是可以使用位移量对其中的数据进行访问,“位移量”指以当前位置(开始点或当前位置或文件末尾)为基点,移动的字节数。
(2)C++语言既支持顺序访问文件也支持随机访问文件。为实现对文件的随机访问,fstream文件类中定义了以下4个成员函数:seekg ( )、tellg ( )、seekp ( )和ellp ( )。seekg ( )和tellg ( )带后缀g表示get,这两个函数用于从文件中读取数据的情况;函数seekp ( )和tellp ( )带后缀p表示put,这两个函数用于向数据文件中写数据的情况。
7.C++语言把文件看作是一个字符(字节)序列,即由一个一个字符的数据顺序组成。根据数据的组织形式可分为ASCII文件和二进制文件两种。ASCII文件又称为文本(text)文件或字符文件,它的每一个字节放一个ASCII代码,代表一个字符。二进制文件又称为字节文件,是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。
4.用格式控制符进行格式化输入、输出
5.所谓“文件”一般是指:存储在外部介质上的数据的集合。文件可用于存入程序代码,也可用于存放数据。
6.C++语言的文件名也是由文件的主名和扩展名两部分组成,它们之间用“.”号分隔。文件的主名是由用户命名的一个有效的C++标识符,为了同其他软件系统兼容,一般不超过8个有效字符。
{//操作代码
return s;
}
其中左操作数是对ostream或istream对象的引用,右操作数接收将被输出或输入的对象。
(3)对重载的插入符或提取符的调用形式如下:
ostream<<obj;
istream>>obj;
分析:
(1)不清楚插入符和提取符应重载为类的友元。
(2)重载插入符和提取符格式错误。
Hexadecimal:F
Octal:17
6.54321
6.54
6.54
6.54
6.543E+000
6.5432
分析:程序中使用输入输出流格式控制符,必须包含头文件iomanip.h。
整型数number=15是个十进制数,dec控制符输出十进制数;hex控制符输出十六进制数f;setiosflags(ios::uppercase)控制符输出大写十六进制数F;oct控制符输出八进制数17。
8.2 例题分析
例题1:说明下面程序的格式控制符的作用
#include <iostream.h>
#include <iomanip.h>
void main()
{ int number1=15;
double number2=6.54321;
cout<<"Decimal:"<<dec<<number1<<endl;
例题4:某个类的输入、输出重载操作符>>和<<应定义为类的成员函数,描述正确吗?
答案:错误。
分析:由于重载插入符和提取符时,其左操作数是流,右操作数是类的对象,因此,插入符和提取符只能重载为友元函数。
例题5:下面程序建立了类triangle,用来存储直角三角形的宽与高。这个类的重载输出运算符函数在屏幕上显示三角形。
其中,buf用来存放读取到的字符指针或字符数组,size用来指定从输出流中读取字符的个数。read函数不仅可以从键盘输入中读取字符,也可以从任意输入流中获取信息,因此答案A错误。read函数读取的字符数受到size参数的限制,答案B错误。read函数不仅可以用于文本文件,也可以用于二进制文件,答案C错误。
cout<<"Hexadecimal:"<<hex<<number1<<endl;
cout<<"Hexadecimal:"<<hex<<setiosflags(ios::uppercase)<<number1<<endl;
cout<<"Octal:"<<oct<<number1<<endl;
cout<<number2<<endl;
};
ostream& operator <<(ostream &stream,triangle ob)
{int i,j,h,k;
i=j=ob.base-1;
for(h=ob.height-1;h;h--)
{ for(k=i;k;k--)
stream<<' ';
stream<<'*';
if(j!=i)
*s='\0';
found=true;
if(cin)
cin.putback(ch);
return found;
}
例题7:定义一个Dog类,包含体重和年龄两个数据成员及相应的成员函数。声明一个实例dog1,体重为5,年龄为10,使用I/O流把dog1的状态写入磁盘文件;再声明另一个实例dog2,通过读文件把dog1的状态赋给dog2。
8.对文件的操作
要在程序中使用文件,就要在程序的开始包含预处理命令:
#include <fstream.h>
对一般文件(主要是磁盘文件)的操作过程是:打开,读/写,关闭。
用户对标准I/O文件不需要进行打开/关闭,标准I/O文件函数分为以下三种:
(1)字符I/O函数 字符输入函数getchar ( )和字符输出函数putchar ( )。
第8章 C++的I/O系统
8.1 知识要点
1.C++语言的“流”是指信息从外部输入设备(如键盘、磁盘等)向计算机内部(内存)输入和从内存向外部输出设备(显示器、磁盘)输出的过程。这种输入输出过程被形象地比喻为“流”。
2.C++系统中的所有I/O类均包含在iostream.h、fstream.h、strstream.h这三个系统头文件中。
3.C++系统编译预处理时,要对# include命令进行“文件包含”处理,把该命令中指定的文件中的全部内容嵌入到该命令的位置,再编译整个C++文件,生成相应的目标代码程序。“文件包含”命令可以节省程序设计人员的重复劳动,也可以共享一些相同的程序段。
相关主题