【C++】输入输出流 ⑤ ( cin 输入流对象 | cin.ignore() 函数 | cin.peek() 函数 | cin.putback() 函数 )
  K1I6GvxBEuyy 2023年12月22日 34 0



文章目录

  • 一、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
请按任意键继续. . .

【C++】输入输出流 ⑤ ( cin 输入流对象 | cin.ignore() 函数 | cin.peek() 函数 | cin.putback() 函数 )_输入流






二、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 ;

【C++】输入输出流 ⑤ ( cin 输入流对象 | cin.ignore() 函数 | cin.peek() 函数 | cin.putback() 函数 )_输出流_02



代码示例 :

#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
请按任意键继续. . .

【C++】输入输出流 ⑤ ( cin 输入流对象 | cin.ignore() 函数 | cin.peek() 函数 | cin.putback() 函数 )_IO流_03






三、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
请按任意键继续. . .

【C++】输入输出流 ⑤ ( cin 输入流对象 | cin.ignore() 函数 | cin.peek() 函数 | cin.putback() 函数 )_输出流_04


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月22日 0

暂无评论

推荐阅读
  8Tw5Riv1mGFK   2024年05月01日   71   0   0 C++
  BYaHC1OPAeY4   2024年05月08日   53   0   0 C++
  yZdUbUDB8h5t   2024年04月29日   54   0   0 C++
  yZdUbUDB8h5t   2024年05月05日   40   0   0 C++
  oXKBKZoQY2lx   2024年05月17日   50   0   0 C++
K1I6GvxBEuyy
作者其他文章 更多