💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
所有流均可进行高级/低级IO。 ## 一.标准输入 1. 格式 ```c++ cin>>var1>>var2>>...; ``` 2. 流提取运算符读取数据时通常跳过输入流中的空格、Tab键、换行符等空白字符。 3. 只有在键盘输入完数据并按回车键后,该行数据才被送入键盘缓冲区,形成输入流,提取运算符“>>”才能从中提取数据。 ## 二.标准输出 1.用法: ```c++ obj<<content<<...; ``` + 这些对象已为C++的标准类型重载了<<运算符,输出数据的类型无需用户干预。但是,用户定义的类和对象需要手动重载<<运算符。 + 一个运算符只能插入一个输出项。 2. **cout对象** *console coutput* 在控制台(终端显示器)的输出。 3. **cerr对象** *console error* 在控制台(终端显示器)显示错误信息。 + 与 **cout** 的区别:cerr流已被指定与显示器关联,而cout可以被重定向输出到磁盘文件。 4. **clog对象** *console log* 在控制台(终端显示器)显示错误信息。 + 与 **cerr** 的区别:cerr流不经过缓冲区,直接向显示器输出信息,而clog中的信息存放在缓冲区中,缓冲区满或遇到endl时向显示器输出。 ## 三.文件流 > `fstream` 是一个文件流类,包括 `ifstream`、`ofstream`、`fstream` | 函数或初始化语句 | 含义 | | -------------------------- | ------------------------------------------------------------ | | `fstream fs;` | 创建一个未绑定的文件流。 | | `fstream fs(file);` | 创建一个文件流,并打开文件 `file`。`file` 可以是字符串对象,也可以是C风格字符串。 | | `fstream fs(s,mode);` | 创建一个文件流,并按照模式 `mode` 打开文件 `file`。`file` 可以是字符串对象,也可以是C风格字符串。 | | `void fs.open(file)` | 打开文件 `file`。`file` 可以是字符串对象(旧标准不支持),也可以是C风格字符串。 | | `void obj.open(file,mode)` | 按照模式 `mode` 打开文件 `file`。`file` 可以是字符串对象,也可以是C风格字符串。 | | `void obj.close()` | 关闭文件流。 | | `bool obj.is_open()` | 文件是否打开。 | + 当文件无法打开(例如被占用)时,`failbit` 会被置位。当打开完文件后,应当检测是否打开成功: ```c++ if (fs) //文件打开成功 ``` + 为了避免文件无法被其他程序正常打开,在文件打开完毕后,应当关闭文件。 + 但是 `fstream` 在析构时,会自动关闭文件。 + 关闭后,原来指定的文件模式无效。 ## 四.文件打开模式 ### 1.文件模式概览 >打开方式可以用 `|` 分隔开 | 方式 | 作用 | | ----------- | ------------------------------------------------------------ | | ios::in | **读** 打开文件 | | ios::out | **写** **覆盖** 打开文件,如果已有此名字的文件,则将其原有内容全部擦除。 | | ios::app | **追加** 以输出方式打开文件,每次写操作时自动定位到文件末尾 | | ios::ate | **指向末尾** 打开一个已有的文件,文件指针指向文件末尾 | | ios::trunc | **覆盖** 打开一个文件,如果文件已存在,则删除其中全部数据,如文件不存在,则建立新文件。如已指定了 `ios::out` 方式,而未指定 `ios::app` , `ios::ate` ,`ios::in` ,则同时默认此方式。 | | ios::binary | **二进制访问** 以二进制方式打开一个文件,如不指定此方式则默认为ASCII方式 | ### 2.文件模式限制 + 只可以对 `ofstream` 或 `fstream` 对象设定 `out` 模式。 + 只可以对 `ifstream` 或 `fstream` 对象设定 `in` 模式。 + 只有当 `out` 也被设定时才可设定 `trunc` 模式。 + 只要 `trunc` 没被设定,就可以设定 `app` 模式。在 `app` 模式下,即使没有显式指定 `out` 模式,文件也总是以输出方式被打开。 + 默认情况下,即使我们没有指定 `trunc` ,以 `out` 模式打开的文件也会被截断。 + `ate` 和 `binary` 模式可用于任何类型的文件流对象,且可以与其他任何文件模式组合使用。 ### 3.默认的文件模式 1. 与 `ifstream` 关联的文件默认以 `in` 模式打开。 2. 与 `ofstream` 关联的文件默认以 `out` 模式打开。 3. 与 `fstream` 关联的文件默认以 `in` 和 `out` 模式打开。 ## 五.字符串流 > `sstream` 是一个字符串流类,包括 `istringstream`、`ostringstream`、`stringstream` | 函数或初始化语句 | 含义 | | ------------------------ | ------------------------------------ | | `sstream ss;` | 创建一个未绑定的字符串流。 | | `sstream ss(string &s);` | 创建一个字符串流,并拷贝字符串 `s`。 | | `string ss.str()` | 返回字符串的拷贝。 | | `void ss.str(string &s)` | 拷贝字符串 `s` 到流中。 |