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

xiaoxiao2021-02-28  8

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将数据传送给字符数组。 分别对同一字符数组进行操作。甚至可以对字符数组交叉进行读写, 输入字符串流和输出字符串流分别有流指针指示当前位 置,互不干扰。 它比外存文件使用方便,不必建立文件(不 需打开与关闭),存取速度快。 但它的生命周期与其所在的模块(如主函数)相同,该模块的生命周期结束后,字符数组也不存在了。 因此只能作为临时的存储空间。
转载请注明原文地址: https://www.6miu.com/read-450264.html

最新回复(0)