【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

相关文章

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程