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

news2024/11/19 14:40:15

文章目录

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1298236.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MEME成风,为何比特币生态无法复刻以太坊生态的多样玩法?

铭文市场火了之后&#xff0c;很多人对 BTC L2 投入了过多的期许&#xff0c;认为 BTC 2 层会像以太坊 layer2 一样辉煌&#xff1f; 然而事实是&#xff0c;比特币生态的「成功」可能很长时间会停滞在「资产发行」叙事阶段&#xff0c;要复刻以太坊的生态多样玩法&#xff0c…

thinkphp6入门(12)-- 一对一关联模型

定义一对一关联&#xff0c;例如&#xff0c;一个用户都有一个个人资料。 一、两表 1.用户表:user 2.工作经验表&#xff1a;work_experience user表的id关联work_experience表的user_id。 注意看&#xff0c;user_id1的有2条工作经验 二、数据模型 主表模型&#xff1a;…

低多边形3D建模动画风格纹理贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

掌握PyTorch数据预处理(一):让模型表现更上一层楼!!!

引言 在PyTorch中&#xff0c;数据预处理是模型训练过程中不可或缺的一环。通过精心优化数据&#xff0c;我们能够确保模型在训练时能够更高效地学习&#xff0c;从而在实际应用中达到更好的性能。今天&#xff0c;我们将深入探讨一些常用的PyTorch数据预处理技巧&#xff0c;…

【交换排序 简单选择排序 堆排序 归并排序】

文章目录 交换排序简单选择排序堆排序归并排序 交换排序 冒泡排序的算法分析&#xff1a; 冒泡排序最好的时间复杂度是O&#xff08;n&#xff09;冒泡排序最好的时间复杂度是O&#xff08;n平方&#xff09;冒泡排序平均时间复杂度为O&#xff08;n的平方&#xff09;冒泡排…

1-6、编程语言排行榜

语雀原文链接 https://www.tiobe.com/tiobe-index/

基于Vue框架的电子商城购物平台小程序的设计与开发

基于JavaWebSSMVue电子商城购物平台小程序系统的设计和实现 源码获取入口KaiTi 报告/Ren务书Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 KaiTi 报告/Ren务书 一、选题的目的和意义 自从微信推出了微信小程序…

如何自动筛选高质量的指令微调数据喂给大模型?

前言 大家都知道在大模型时代&#xff0c;数据有多么重要&#xff0c;质量多高都不过分&#xff01;甚至直接决定着最终的效果。 尤其做SFT&#xff0c;模型框架基本不用改&#xff08;事实上也改不动&#xff09;&#xff0c;如何做一份符合自己场景高质量的SFT数据成了唯一…

C++中STL的容器vector

文章目录 什么是vectorvector与普通顺序表不同的点 vector的成员函数operatoroperator[]begin与end与iteratorsize()capacityresizeemptyreservepush_backpop_backinserteraseswapclear成员变量 总结 什么是vector vector&#xff1a;是数据结构里面的顺序表&#xff0c;开辟一…

【MATLAB】基于EMD分解的信号去噪算法(基础版)

代码操作 【MATLAB】基于EMD分解的信号去噪算法&#xff08;基础版&#xff09; 代码的主要内容 基于EMD&#xff08;经验模态分解&#xff09;的信号去噪算法通常可以结合相关系数、信号的熵值或者方差贡献率来完成去噪处理。这些指标可以用于确定阈值&#xff0c;从而对信号…

WPF仿网易云搭建笔记(2):组件化开发

文章目录 前言专栏和Gitee仓库依赖属性实战&#xff1a;缩小&#xff0c;全屏&#xff0c;关闭按钮依赖属性操作封装主窗口传递this本身给TitleView标题控件主要代码MainWindow.xmalMainWindow.cs依赖属性方法封装TitleView.csTitleViewModelTitleViewModel实现效果 前言 这次…

FreeRTOS的内存管理方法(超详细)

内存管理 我们知道每次创建任务、队列、互斥锁、软件定时器、信号量或事件组时&#xff0c;RTOS 内核都需要 RAM &#xff0c; RAM 可以从 RTOS API 对象创建函数内的 RTOS 堆自动动态分配&#xff0c; 或者由应用程序编写者提供。 如果 RTOS 对象是动态创建的&#xff0c;那么…

Mac虚拟机CrossOver23破解版下载和许可证下载

CrossOver Mac Mac 和 Windows 系统之间的兼容工具。使 Mac 操作系统的用户可以运行 Windows 系统的应用&#xff0c;从办公软件、实用工具、游戏到设计软件&#xff0c; 您都可以在 Mac 程序和 Windows 程序之间随意切换。 系统要求 运行macOS的基于Intel或Apple Silicon 的…

99、NeRF ray space

CG相机模型 在图形学中最常用的相机模型的原理和小孔成像是类似的。 不同之处在于&#xff0c;如上图&#xff0c;小孔成像得到的图像是倒立的&#xff0c;但是我们希望得到的图像是正向的&#xff0c;因此&#xff0c;我们选择小孔前成像。 从 3D 到 2D 的投影&#xff0c;…

笔迹鉴定系统

用于笔迹鉴定书的生成。对于检材进行的特征采集&#xff0c;将采集到的特征自动排版&#xff0c;生成比对表&#xff0c;然后在比对表上进行标注。主要标注有&#xff1a;写法、笔顺、箭头、实线、虚线、左括号、右括号、上括号、下括号、运笔、注释、来源、折线、测量、矩形、…

iptables——建立linux安全体系

目录 一. 安全技术类型 二. linux防火墙 1. 按保护范围划分&#xff1a; 2. 按实现方式划分&#xff1a; 3. 按网络协议划分&#xff1a; 4. 防火墙原理 三. 防火墙工具——iptables 1. netfilter 中五个勾子函数和报文流向 数据包传输过程&#xff1a; ① .五表四链…

【2023传智杯-新增场次】第六届传智杯程序设计挑战赛AB组-DEF题复盘解题分析详解【JavaPythonC++解题笔记】

本文仅为【2023传智杯-第二场】第六届传智杯程序设计挑战赛-题目解题分析详解的解题个人笔记,个人解题分析记录。 本文包含:第六届传智杯程序设计挑战赛题目、解题思路分析、解题代码、解题代码详解 文章目录 一.前言二.赛题题目D题题目-E题题目-F题题目-二.赛题题解D题题解-…

个人博客网站如何实现https重定向(301)到http

对于个人网站站注册比较少的&#xff0c;服务器配置不是很好的&#xff0c;没必要https,https跳转到http是要时间的&#xff0c;会影响网站打开的速度。免费的https每年都要更换。个人博客网站https有一段时间了&#xff0c;而且很多页面都有收录排名&#xff0c;现在已去掉htt…

redis中使用事务保护数据完整性

事务是指一个执行过程&#xff0c;要么全部执行成功&#xff0c;要么失败什么都不改变。不会存在一部分成功一部分失败的情况&#xff0c;也就是事务的ACID四大特性&#xff08;原子性、一致性、隔离性、持久性&#xff09;。但是redis中的事务并不是严格意义上的事务&#xff…

Eclipse 4.30 正式发布 来看看有哪些值得期待的新特性

Eclipse 4.30 已正式发布&#xff0c;主要特性如下&#xff1a; 1、支持新的 Java 语言特性&#xff1a;包括 JEP 440: Record Patterns 和 JEP 441: Pattern Matching for Switch 2、针对 Java 编辑器的快速修复功能&#xff1a;包括添加默认 case、移除默认 case 和插入 br…