ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 一.单字节操作 > `is` 表示输入流,`os` 表示输出流 | 函数 | 含义 | | -------------------------- | ------------------------------------------------------------ | | `istream &is.get(char &ch)` | 从输入流中读取一个字节存入 `ch`。 | | `int is.get()` | 从输入流中读取一个字节。 | | `ostream &is.put(char ch)` | 将字符输出到流中。 | | `ostream &is.putback(char ch)` | 将字符放回到流中。 | | `istream &is.unget();` | 将 `is` 向后移动一个字节,使得最后读取的值回到流中。 | | `int is.peek();` | 将下一个字节作为 `int`返回,但不从流中删除。| ### 将字符放回流中 + `peek` 返回输入流中下一一个字符的副本,但不会将它从流中删除,`peek` 返回的值仍然留在流中。 + `unget` 使得输入流向后移动,从而最后读取的值又回到流中。即使我们不知道最后从流中读取什么值,仍然可以调用 `unget` 。 + `putback` 是更特殊版本的 `unget` : 它退回从流中读取的最后一个值,但它接受一个参数,此参数必须与最后读取的值相同。 一般情况下, 在读取下一个值之前,标准库保证我们可以退回最多一个值。 ## 二.多字节操作 | 函数 | 含义 | | -------------------------- | ------------------------------------------------------------ | | `istream &is.get(char *start,int size,char ch = '\n')` | 从 `is` 中读取最多`size` 个字节,并保存在字符数组中,字符数组的起始地址由 `start` 给出。如果遇到了 `ch` ,则将其留在输入流中,不读取出来存入 `sink`。 | | `istream &is.getline(char *start,int size,char ch = '\n')` | 类似第一个函数,但会将 `ch` 丢掉。| | `istream &is.read(char *start,int size)` | 一般用于二进制操作。读取 `size` 个字符到字符数组中。 | | `ostream &is.write(char *source,int size)` | 一般用于二进制操作。写入 `size` 个字符到流中。 | | `int is.gcount()` | 返回上一个低级I/O操作中读取的字符个数。| | `istream &is.ignore(int n = 1,char ch = EOF)` | 跳过输人流中 `n` 个字符,或在遇到指定的终止字符 `ch` 时提前结束(也跳过终止字符)| ### 1.get 和 getline 的联系和区别 1. **联系** `get`和`getline`函数接受相同的参数,它们的行为类似但不相同。在两个函数中, `start` 都是 `char` 数组,用来保存数据。两个函数都一直读取数据,直至下面条件之一发生: + 已读取了 `size-1` 个字符 + 遇到了文件尾 + 遇到了分隔符 2. **区别** + `get` 遇到 `ch`时 ,指针停在终止字符。 + `getline` 遇到 `ch`时 ,指针停在终止字符的下一个字符。 哪个函数都不会将分隔符保存在字符数组中。 | 函数或对象 | 读取方式 | 终止字符 | 遇终止字符的处理方式 | | ---- | ---- | ---- | --------- | | cin.get | 逐个字符读取 |可自行设定,默认是 `\n` |指针停在终止字符| | cin.getline | 逐行读取 |可自行设定,默认是 `\n` |指针停在终止字符的下一位| | cin | 逐个量读取 |空白字符(空格 Tab 回车)|指针停在终止字符的下一位| #### 例1 ```c++ #include <iostream> using namespace std; int main() { char test[100]; cin.get(test,100,'/'); cout<<test; cin.getline(test,100,'/'); cout<<test; return 0; } ``` >[test] >Hello World!/[按下Enter] >Hello World! >Press any key to continue >[info]第二次输入时 `getline`一开始读取就因遇到`'/'`而终止了。所以并不需要用户输入。 ### 2.字符串对象的输入 | 函数 | 含义 | | -------------------------- | ------------------------------------------------------------ | | `istream &getline(istream &is,string &s,char ch = '\n')` | 从 `is` 中读取字符并保存到字符串对象,如果遇到了 `ch` ,则将其留在输入流中,不读取出来。 |