0719学习总结(文件流的输入输出)

来源:互联网 发布:淘宝网退货地址怎么改 编辑:程序博客网 时间:2024/05/21 09:56
1.输入输出流
常用的有:
iostream  包含了对输入输出流进行操作所需的基本信息:
fstream  用于用户管理的文件的I/O操作。
strstream  用于字符串流I/O。
stdiostream  用于混合使用C和C + +的I/O机制时,例如想将C程序转变为C++程序。
iomanip  在使用格式化I/O时应包含此头文件。


2.在iostream头文件中定义的流对象
在 iostream 头文件中定义的类有:
ios,istream,ostream,iostream,istream _withassign, ostream_withassign,iostream_withassign 等。


3.标准输出流
ostream类定义了个输出流对象,即cout、cerr、clog;
cout流对象:cont是console output的缩写,意为在控制台(终端显示器)的输出。
cerr流对象:cerr流对象是标准错误流,cerr流已被指定为与显示器关联。
cerr的作用是向标准错误设备(standard error device)输出有关出错信息。
clog流对象:clog流对象也是标准错误流,它是console log的缩写。它的作用和cerr相同,都是在终端显示器上显示出错信息.

4.C++格式化输出,格式控制
cout<<"dec:"<<dec<<a<<endl;     //以十进制形式输出整数 
cout<<"hex:"<<hex<<a<<endl; //以十六进制形式输出整数a
cout<<"oct:"<<setbase(8)<<a<<endl; //以八进制形式输出整数a 
char *pt="China";            //pt指向字符串"China“
cout<<setw(10)<<pt<<endl;   //指定域宽为,输出字符串

5.流程员put
输出单个字符的成员函数put。如:  
  cout.put(‘a’);
调用该函数的结果是在屏幕上显示一个字符a。


put函数的参数可以是字符或字符的ASCII代码(也可以是一个整型表达式)。如:
    cout.put(65 + 32);
也显示字符a,因为97是字符a的ASCII代码。

可以在一个语句中连续调用put函数。如:    
cout.put(71).put(79).put(79). put(68).put('\n');
在屏幕上显示GOOD。

6. cin输入流
cin是istream类的对象,它从标准输入设备(键盘)获取数据,程序中的变量通过流提取符“>>”从流中提取数据。


流提取符“>>”从流中提取数据时通常跳过输入流中的空格、tab键、换行符等空白字符。

7.c++中get
1) 不带参数的get函数
其调用形式为:        cin.get()
用来从指定的输入流中提取一个字符(包括空白字符),函数的返回值就是读入的字符。 


若遇到输入流中的文件结束符,则函数值返回文件结束标志EOF(End Of File),一般以-1代表EOF,但不同的C ++系统所用的EOF值有可能不同。


2) 有一个参数的get函数
其调用形式为:    cin.get(ch)
其作用是从输入流中读取一个字符,赋给字符变量ch。


如果读取成功则函数返回true(真),如失败(遇文件结束符) 则函数返回false(假)。

3) 有3个参数的get函数
其调用形式为
   cin.get(字符数组, 字符个数n, 终止字符)
或  cin.get(字符指针, 字符个数n, 终止字符)
其作用是从输入流中读取n-1个字符,赋给指定的字符数组(或字符指针指向的数组),如果在读取n-1个字符之前遇到指定的终止字符,则提前结束读取。
如果读取成功则函数返回true(真),如失败(遇文件结束符) 则函数返回false(假)。


8.C++中getline
getline函数的作用是从输入流中读取一行字符,其用法与带3个参数的get函数类似。
即    cin.getline(字符数组(或字符指针), 字符个数n, 终止标志字符)

9.其他流函数
eof 函数
eof是end of file的缩写,表示“文件结束”。从输入流读取数据,如果到达文件末尾(遇文件结束符),eof函数值为非零值(真),否则为0(假)。


peek函数
peek是“观察”的意思,peek函数的作用是观测下一个字符。
其调用形式为: c=cin.peek( );
函数的返回值是指针指向的当前字符,但它只是观测,指针仍停留在当前位置,并不后移。如果要访问的字符是文件结束符,则函数值是EOF(-1)。

putback函数
其调用形式为
    cin.putback(ch);
其作用是将前面用get或getline函数从输入流中读取的字符ch返回到输入流,插入到当前指针位置,以供后面读取。


ignore函数
其调用形式为
    cin.ignore(n, 终止字符)
函数作用是跳过输入流中n个字符,或在遇到指定的终止字符时提前结束(此时跳过包括终止字符在内的若干字符)。

如:    ighore(5, ‘A’)  //跳过输入流中个字符,遇‘A’后就不再跳了;也可以不带参数或只带一个参数,如:
    ignore( )  // n默认值为,终止字符默认为EOF
相当于    ignore(1, EOF)  

10.文件
有3个用于文件操作的文件类:
ifstream类,它是从istream类派生的,用来支持从磁盘文件的输入。
ofstream类,它是从ostream类派生的,用来支持向磁盘文件的输出。
fstream类,它是从iostream类派生的,用来支持对磁盘文件的输入输出。

11.文件打开关闭
1) 调用文件流的成员函数open。如
ofstream outfile;  //定义ofstream类(输出文件流类)对象outfile
outfile.open(“f1.dat”,ios::out);  //使文件流与f1.dat文件建立关联;

2) 在定义文件流对象时指定参数
可以在定义文件流对象时指定参数,调用文件流类的构造函数来实现打开文件的功能。如
 ostream outfile("f1.dat",ios::out);
一般多用此形式,比较方便。作用与open函数相同。

关闭磁盘文件
在对已打开的磁盘文件的读写操作完成后,应关闭该文件。关闭文件用成员函数close。如
    outfile.close( );  //将输出文件流所关联的磁盘文件关闭


12.对ascii文件的读写
如果文件的每一个字节中均以ASCII代码形式存放数据,即一个字节存放一个字符,这个文件就是ASCII文件(或称字符文件)。
对ASCII文件的读写操作可以用以下两种方法:

1) 用流插入运算符“<<”和流提取运算符“>>”输入输出标准类型的数据。
2) 用文件流的put、get、geiline等成员函数进行字符的输入输出。

13.对二进制文件读写
1.二进制文件不是以ASCII代码存放数据的,它将内存中数据存储形式不加转换地传送到磁盘文件,因此它又称为内存数据的映像文件。
因为文件中的信息不是字符数据,而是字节中的二进制形式的信息,因此它又称为字节文件。

2.对二进制文件的操作也需要先打开文件,用完后要关闭文件。
在打开时要用ios::binary指定为以二进制形式传送和存储。
二进制文件除了可以作为输入文件或输出文件外,还可以是既能输入又能输出的文件。这是和ASCII文件不同的地方。

用成员函数read和write读写二进制文件
对二进制文件的读写主要用istream类的成员函数read和write来实现。这两个成员函数的原型为
istream& read(char *buffer,int len);
ostream& write(const char * buffer,int len);
字符指针buffer指向内存中一段存储空间。len是读写的字节数。

调用的方式为:
  a. write(p1,50);
  b. read(p2,30);
上面第一行中的a是输出文件流对象,write函数将字符指针p1所给出的地址开始的50个字节的内容不加转换地写到磁盘文件中。在第二行中,b是输入文件流对象,
read 函数从b所关联的磁盘文件中,读入30个字节(或遇EOF结束),存放在字符指针p2所指的一段空间内。

14.对字符串的读写
文件流是以外存文件为输入输出对象的数据流,字符串流不是以外存文件为输入输出的对象,而以内存中用户定义的字符数组(字符串)为输入输出的对象,即将数据输出到内存中的字符数组,
或者从字符数组(字符串)将数据读入。字符串流也称为内存流。

文件流类有ifstream,ofstream和fstream,
而字符串流类有istrstream,ostrstream和strstream。
文件流类和字符串流类都是ostream,istream和iostream类的派生类,因此对它们的操作方法是基本相同的。
向内存中的一个字符数组写数据就如同向文件写数据一样,但有3点不同:
输出时数据不是流向外存文件,而是流向内存中的一个存储空间。
输入时从内存中的存储空间读取数据。在严格的意义上说,这不属于输入输出,称为读写比较合适

15.建立输入字符串流对象
istrstream类提供了两个带参的构造函数,原型为:
istrstream::istrstream(char *buffer);  
istrstream::istrstream(char *buffer,int n);
buffer是指向字符数组首元素的指针,用它来初始化流对象(使流对象与字符数组建立关联)。

可以用以下语句建立输入字符串流对象
istrstream strin(ch2);
作用是建立输入字符串流对象strin,将字符数组ch2中的全部数据作为输入字符串流的内容。
istrstream strin(ch2,20);
流缓冲区大小为20,因此只将字符数组ch2中的,20个字符作为输入字符串流的内容。

对字符串流的几点说明:
1) 用字符串流时不需要打开和关闭文件。

2) 通过字符串流从字符数组读数据就如同从键盘读数据一样,
可以从字符数组读入字符数据,也可以读入整数、浮点数或其他类型数据。
如果不用字符串流,只能从字符数组逐个访问字符,而不能按其他类型的数据形式读取数据。
这是用字符串流访问字符数组的优点,使用方便灵活。

3) 程序中先后建立了两个字符串流strin和strout,与字符数组c关联。
strin从字符数组c中获取数据,strout将数据传送给字符数组。
分别对同一字符数组进行操作。甚至可以对字符数组交叉进行读写,
输入字符串流和输出字符串流分别有流指针指示当前位 置,互不干扰。


它比外存文件使用方便,不必建立文件(不 需打开与关闭),存取速度快。
但它的生命周期与其所在的模块(如主函数)相同,该模块的生命周期结束后,字符数组也不存在了。
因此只能作为临时的存储空间。




































原创粉丝点击