【C++】输入输出流 ⑤ ( cin 输入流对象 | cin.ignore() 函数 | cin.peek() 函数 | 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
请按任意键继续. . .

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/han1202012/article/details/134883713
今日推荐