文章目录
- 一、cin.ignore() 函数
- 1、cin.ignore() 函数简介
- 2、cin.ignore() 函数原型
- 3、代码示例 - cin.ignore() 函数
- 二、cin.peek() 函数
- 1、cin.peek() 函数简介
- 2、代码示例 - cin.peek()
- 三、cin.putback() 函数
- 1、cin.putback() 函数简介
- 2、代码示例 - cin.putback()
一、cin.ignore() 函数
1、cin.ignore() 函数简介
C++ 中 标准输入流 的 cin.ignore() 函数 用于从 输入流中 忽略 一个或多个字符 ;
cin.ignore() 函数 使用场景 : 在 处理输入流时 忽略掉不需要的字符或者数值 , 如 : 在读取特定字符之前的所有字符 , 或者 在读取整数值时忽略掉逗号或空格等分隔符 ;
2、cin.ignore() 函数原型
cin.ignore() 函数原型 :
istream& ignore(int count = 1, int delim = EOF);basic_istream& __CLR_OR_THIS_CALL ignore(streamsize _Count = 1,int_type _Metadelim = _Traits::eof())
{ // ignore up to _Count characters, discarding delimiter
-
参数解析 :
- count 参数 : 表示要忽略的字符数量 , 默认值为1 ;
- delim:表示停止忽略的条件,默认值为 EOF , End Of File , 表示文件结束 ; 也就是说,默认情况下 , cin.ignore() 会一直忽略字符 , 直到遇到文件结束符为止 ;
-
返回值解析 : 该函数返回一个引用到调用它的流对象,所以你可以把 cin.ignore() 链接到其他输入流操作中。
使用 Ctrl + Z 组合按键 , 可以向命令行中输入 EOF 字符 ;
3、代码示例 - cin.ignore() 函数
在下面的示例中 , 在命令行中 , 使用键盘输入 “hello world” ;
cin >> buf;
可以将空格之前的数据输出到 buf 数组中 , 读取 “hello” 到数据缓冲区中 ;
cin.ignore(3);
忽略掉 输入缓冲区中 后面 3 个字符 , 空格以及 “wo” 字符被忽略 ;
cin.getline(buf2, 32);
将剩余的字符读取到 buf2 数组中 , “rld” 字符被读取到 buf2 缓冲区中 ;
代码示例 :
#include "iostream"
using namespace std;int main() {char buf[32];char buf2[32];// 命令行中 , 使用键盘输入 "hello world"// 将空格之前的数据输出到 buf 数组中// 读取 "hello" 到数据缓冲区中cin >> buf;// 忽略掉后面 3 个字符// 空格以及 "wo" 字符被忽略cin.ignore(3);// 将剩余的字符读取到 buf2 数组中// "rld" 字符被读取到 buf2 缓冲区中cin.getline(buf2, 32);// 输出接收的数据cout << "buf=" << buf << endl;cout << "buf2=" << buf2 << endl;// 控制台暂停 , 按任意键继续向后执行system("pause");return 0;
};
执行结果 :
hello world
buf=hello
buf2=rld
请按任意键继续. . .
二、cin.peek() 函数
1、cin.peek() 函数简介
cin.peek() 函数 用于查看输入流中的下一个字符 , 但并不从输入流中提取这个字符 ;
cin.peek() 函数返回一个 char 类型的值 , 代表输入流中的下一个字符 , 如果输入流已经读取到了结尾 , 或者没有任何更多的数据 , 那么这个函数将返回 EOF , End Of File ;
2、代码示例 - cin.peek()
下面的代码中 , 输入 “hello world” 字符 ,
读取 缓冲区中的 “hello” 字符到 buf 数组中 , 然后再忽略 3 个字符 , 只剩下 “rld” 字符 ,
使用 peek 函数读取第一个字符 ‘r’ , 小写字母 r 对应码表中的 114 ;
代码示例 :
#include "iostream"
using namespace std;int main() {char buf[32];char buf2[32];// 命令行中 , 使用键盘输入 "hello world"// 将空格之前的数据输出到 buf 数组中// 读取 "hello" 到数据缓冲区中cin >> buf;// 忽略掉后面 3 个字符// 空格以及 "wo" 字符被忽略cin.ignore(3);// 读取第一个字符, 查看后续是否有字符int c = cin.peek();cout << "c=" << c << endl;if (c != 0) {// 将剩余的字符读取到 buf2 数组中// "rld" 字符被读取到 buf2 缓冲区中cin.getline(buf2, 32);// 输出接收的数据cout << "buf=" << buf << endl;cout << "buf2=" << buf2 << endl;}// 控制台暂停 , 按任意键继续向后执行system("pause");return 0;
};
执行结果 :
hello world
c=114
buf=hello
buf2=rld
请按任意键继续. . .
三、cin.putback() 函数
1、cin.putback() 函数简介
cin.putback() 函数 用于将一个字符放回输入流中 , 将最近从输入流中提取的一个字符重新放回流中 , 以便再次读取 ;
cin.putback() 函数原型如下 :
istream& putback(char c);
- 参数解析 : 参数 c 是要放回输入流中的字符
- 返回值解析 : 该函数返回一个指向调用它的输入流的引用 , 因此可以进行链式调用 ;
2、代码示例 - cin.putback()
在下面的示例中 , 输入内容 “hello” , 取出第一个字符 , 判断是否是 h 字符 , 如果是则将取出的字符放回缓冲区 , 将缓冲区的内容输出到 字符数组中 ;
代码示例 :
#include "iostream"
using namespace std;int main() {char c;char buf[32];// 命令行中 , 使用键盘输入 "hello"// 读取第一字节字符cin >> c;// 将去除的字符放回去cin.putback(c);if (c == 'h') {cin >> buf;}cout << "c=" << c << " , buf : " << buf << endl;// 控制台暂停 , 按任意键继续向后执行system("pause");return 0;
};
执行结果 :
hello
c=h , buf : hello
请按任意键继续. . .