C++笔记(六)——I/O&异常

这篇博客详细介绍了C++中的I/O流操作,包括iostream库中的cin和cout,fstream库的open()和close()函数,以及如何使用流插入和提取运算符进行文件读写。还探讨了文件位置指针的管理,缓冲区的概念以及如何刷新缓冲区。此外,文章还讲解了C++的异常处理机制,包括try、catch和throw关键字的使用,以及标准异常类的分类和应用。
摘要由CSDN通过智能技术生成
  1. iostream 标准库提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流。
    ·标准库 fstream定义了三个新的数据类型用于文件的访问。
    在这里插入图片描述
    ·open() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。open() 成员函数的第一参数指定要打开的文件的名称和位置,第二个参数定义文件被打开的模式。可以把以上两种或两种以上的模式结合使用。
void open(const char *filename, ios::openmode mode);

在这里插入图片描述

//以写入模式打开文件,并希望截断文件,以防文件已存在
ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc );
//打开一个文件用于读写
ifstream  afile;
afile.open("file.dat", ios::out | ios::in );

· close() 函数用于关闭文件(通常应该在程序结束前关闭),close() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。

void close();

·使用流插入运算符( << )向文件写入信息,使用的是 ofstream 或 fstream 对象,而不是 cout 对象;使用流提取运算符( >> )从文件读取信息,使用的是 ifstream 或 fstream 对象,而不是 cin 对象。

·istream 和 ostream 都提供了用于重新定位文件位置指针的成员函数,包括关于 istream 的 seekg(“seek get”)和关于 ostream 的 seekp(“seek put”)。
seekg 和 seekp参数通常是一个长整型。第二个参数可以用于指定查找方向查找方向可以是 ios::beg(默认的,从流的开头开始定位),也可以是 ios::cur(从流的当前位置开始定位),也可以是 ios::end(从流的末尾开始定位)。
文件位置指针是一个整数值,指定了从文件的起始位置到指针所在位置的字节数

// 定位到 fileObject 的第 n 个字节(假设是 ios::beg)
fileObject.seekg( n );
// 把文件的读指针从 fileObject 当前位置向后移 n 个字节
fileObject.seekg( n, ios::cur );
// 把文件的读指针从 fileObject 末尾往回移 n 个字节
fileObject.seekg( n, ios::end );
// 定位到 fileObject 的末尾
fileObject.seekg( 0, ios::end );
  1. C+程序只检查字节流,而不需要知道字节来自何方;通过使用流,C++程序处理输出的方式将独立于其去向。管理输入的步骤:将流与输入去向的程序关联起来;将流与文件连接起来
    ·缓冲区是用作中介的内存块,它是将信息从设备传输到程序或从程序传输给设备的临时存储工具。输出时,程序首先填满缓冲区,然后把整块数据传输给硬盘,并清空缓冲区,以备下一批输出使用,被称为刷新缓冲区(flushing the buffer)。
    在这里插入图片描述
    ·C++程序通常在用户按下回车键时刷新输入缓冲区;对于屏幕输出,C++程序通常在用户发送换行符时刷新输出缓冲区

  2. 插入运算符的所有化身的返回类型都是ostream&,即原型的格式如下。引用将指向用于调用该运算符的对象,这种特性使得能够通过插入来连接输出。

ostream& operator<<(type)

·除了各种operator<<()函数外,ostream类还提供了put()方法和write()方法,前者用于显示字符,后者用于显示字符串。cout是调用方法的对象,put()和write()是类成员函数。原型如下:

ostream& put(char);
basic ostream<charT,traits>& write(const char type*s,streamsize n)

·如果实现不能在所希望时刷新输出,可以使用两个控制符中的一个来强行进行刷新。
**控制符flush刷新缓冲区,而控制符endl刷新缓冲区,并插入一个换行符。**这两个控制符的使用方式与变量名相同。

cout <<"Hello,good-looking!"<< flush
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值