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

2023-12-09 23:36

本文主要是介绍【C++】输入输出流 ⑤ ( cin 输入流对象 | cin.ignore() 函数 | cin.peek() 函数 | cin.putback() 函数 ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

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

在这里插入图片描述

这篇关于【C++】输入输出流 ⑤ ( cin 输入流对象 | cin.ignore() 函数 | cin.peek() 函数 | cin.putback() 函数 )的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/475438

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

JavaScript对象转数组的三种方法实现

《JavaScript对象转数组的三种方法实现》本文介绍了在JavaScript中将对象转换为数组的三种实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录方法1:使用Object.keys()和Array.map()方法2:使用Object.entr

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数

Python中的sort方法、sorted函数与lambda表达式及用法详解

《Python中的sort方法、sorted函数与lambda表达式及用法详解》文章对比了Python中list.sort()与sorted()函数的区别,指出sort()原地排序返回None,sor... 目录1. sort()方法1.1 sort()方法1.2 基本语法和参数A. reverse参数B.

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺

C++读写word文档(.docx)DuckX库的使用详解

《C++读写word文档(.docx)DuckX库的使用详解》DuckX是C++库,用于创建/编辑.docx文件,支持读取文档、添加段落/片段、编辑表格,解决中文乱码需更改编码方案,进阶功能含文本替换... 目录一、基本用法1. 读取文档3. 添加段落4. 添加片段3. 编辑表格二、进阶用法1. 文本替换2

使用MapStruct实现Java对象映射的示例代码

《使用MapStruct实现Java对象映射的示例代码》本文主要介绍了使用MapStruct实现Java对象映射的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、什么是 MapStruct?二、实战演练:三步集成 MapStruct第一步:添加 Mave