【C++杂项】cin的详细用法

cin详细用法

  • 1. cin简介
  • 2. cin的常用读取方法
    • 2.1 `cin>>`的用法
    • 2.2 `cin.get`的用法
    • 2.3 `cin.getline`的用法
  • 3. `cin`清空输入缓冲区
  • 4. 其它方法
    • 4.1 getline()读取一行

1. cin简介

cin是C++中的标准输入流对象,即istream类的对象。cin主要用于从标准输入读取数据,标准输入指的是终端输入。此外cout是C++中的标准输出流对象,即ostream类对象,cerr是标准错误输出流对象,也是ostream类对象。
当我们从键盘输入字符串的时候,需要敲击回车才能将这个字符串送入到缓冲区中,敲入的这个回车会被转换成一个换行符\n,这个换行符也会被存储在cin的缓冲区中并且被当成一个字符来计算。例如输入123456789,然后再敲回车将字符串输入缓冲区,那么此时缓冲区的字节数是10而不是9.
cin读取数据时也是从缓冲区获取数据,当缓冲区为空时,cin的成员函数会阻塞等待数据的到来,一旦缓冲区中有数据,就触发cin的成员函数去读取数据。

2. cin的常用读取方法

使用cin从标准输入读取数据时,通常用到的方法有cin>>,cin.get(),cin.getline()

2.1 cin>>的用法

cin可以连续从标准输入读取数据,以空格、tab或换行符作为一次读取的分隔符。
代码示例:

//1. cin>>
string a, b;
cin >> a;
cin >> b;
cout <<"a:"<< a << "\nb:" << b << endl;
  • 输入aaa[空格]bbb[回车]

在这里插入图片描述

  • 输入aaa[Tab]bbb[回车]
    在这里插入图片描述
    *输入aaa[回车]bbb[回车]
    在这里插入图片描述
    注意
  1. cin>>从缓冲区中读取数据时,若缓冲区中第一个字符是空格、Tab或回车这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。
  2. 如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理
  3. 不想略过空白字符,那就使用noskipws流控制。比如cin>>noskipws>>input;

2.2 cin.get的用法

该函数有多种重载形式,分为四种:无参数、一个参数、两个参数和三个参数。常用的函数原型如下所示:

int cin.get(); // 读取一个字符,不会跳过分隔符。读取成功:返回读取字符的ASCII码,遇到文件结束符时,返回EOF,即-1
istream& cin.get(char& var); // 读取一个字符,并赋值给var,不会跳过分隔符。读取成功:返回的是cin对象,因此可以支持链式操作,如 `cin.get(a).get(b)`
istream& get ( char* s, streamsize n);// 读取一行,默认以换行符结束,n表示目标空间的大小
istream& get (char* s,  streamsize n, char delim);// 读取一行,以指定的delim作为一行的结束符,n表示目标空间的大小

代码示例:

  • 读取一个字符:输入a[回车]
	int a = cin.get();int b = cin.get();cout << "a:" << a<<"\nb:"<<b << endl;

在这里插入图片描述
可以看到第一次读取,读入了字符a,并返回了ascii码。第二次读取时,直接将缓冲区残余的回车(\n,换行符)读入。

  • 读取一行:输入abcd[回车]
char buf[100];
cin.get(buf, 100);
for (int i = 0; i < 5; i++) // 假设输入5个字符
{cout << "i" << i << "=" << (int)buf[i] << endl;
}
cout << endl;
int b = cin.get();
cout <<"b:"<<b << endl;

在这里插入图片描述
可以看到这种方法读取了[回车]前的所有字符,并存入了buf,但是最后的[回车]符残留在了缓冲区中,下次利用get读取读入了[回车]

  • 以指定字符结束读取入一行:输入abcdef[回车]
char buf[100];
cin.get(buf, 100,'f');// 以f作为结束符
for (int i = 0; i < 5; i++) // 假设输入6个字符abcdef
{cout << "i" << i << "=" << (int)buf[i] << endl;
}int b = cin.get(); // 读取残余的f
cout <<"b:"<<b << endl;int c = cin.get(); // 读取残余的回车
cout << "c:" << c << endl;

在这里插入图片描述
可以看到这种方法读取了字符[f]前的所有字符,并存入了buf,但是最后的残余的[f]和[回车]残留在了缓冲区中,下次利用get读取读入了[f],最后一次读取读入了[回车]

2.3 cin.getline的用法

函数作用:从标准输入上读取一串字符串,并以指定的结束符结束
函数原型有两个

istream& getline(char*s, streamsize count); // 默认以换行符结束
istream& getline(char*s, streamsize count,char delim);// 以指定结束符结束

注意
cin.getlinecin.get的区别是:cin.getline不会将结束符或者换行符残留在输入缓冲区中。

3. cin清空输入缓冲区

清空输入缓冲区应该使用cin.ignore()
函数原型:istream& ignore(streamsize num=1,int delim=EOF)
函数作用:跳过输入流中的num个字符,或者遇到指定的终止字符时提前结束(此时跳过包括终止字符在内的若干个字符)。

4. 其它方法

4.1 getline()读取一行

c++中定义了一个在std命名空间中的全局函数getline(),这个函数使用到了string字符串。
getline利用cin可以从标准输入读取一行,当遇到三种情况下会结束读取操作:1. 到文件结束 2. 到指定的符号 3. 输入达到最大限度
函数原型:

istream& getline(istream& is,string & str); // 从is读取一行到string中,默认以换行符结束
istream& getline(istream& is,string & str,char delim); // 从is读取一行到string中,以delim指定的符号结束

代码示例:

string s;
getline(cin, s);  // 默认字符结束
// getline(cin,s,'\n'); // 指定字符结束
cout <<"s:"<< s << endl;

利用这个getline和stringstream可以实现字符串的拆分
实现

string str;
string str_cin;
getline(cin,str_cin); // 从cin读入一行,假设是ab.cd.ef
// 将字符串转换成stringstream
stringstream ss;
ss<<str_cin;
while(getline(ss,str,'.') // 将ab.cd.ef按照'.'拆分
{cout<<str<<endl;
}

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

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

相关文章

DNS服务器的管理与配置

目录 一、相关知识 域名空间 DNS服务器分类 域名解析过程 资源记录 二、安装DNS服务 安装bind软件包 DNS服务的启动与停止 配置主要名称服务器 主配置文件 从例子学起&#xff1a; &#xff08;1&#xff09;建立主配置文件named.conf &#xff08;2&#xff09;…

Windows10安装Docker Desktop(大妈看了都会)

目录 Windows10安装Docker Desktop&#xff08;大妈看了都会&#xff09; 1.前言 1.1 为什么要在Windows10上安装Docker 1.2 Docker Desktop介绍 2.下载Docker Desktop 3.启用Hyper-V以在 Windows 10上创建虚拟机 4.安装Docker Desktop 5.运行Docker Desktop 6.Docker…

阿里云图片处理之 缩放

文档 : https://help.aliyun.com/zh/oss/user-guide/resize-images-4?spma2c4g.11186623.0.0.61cd2759v4jkhX 需求 : 图片过大, 导致加载过慢, 需对图片进行压缩 <image :src"imgUrl ?x-oss-processimage/resize,h_700,m_lfit"></image>Ps : 题外话…

如何下载省,市,区县行政区Shp数据

摘要&#xff1a;一般非专业的GIS应用通常会用到省市等行政区区划边界空间数据做分析&#xff0c;本文简单介绍了如何在互联网上下载省&#xff0c;市&#xff0c;区县的shp格式空间边界数据&#xff0c;并介绍了一个好用的在线数据转换工具&#xff0c;并且开源。 目录 一、下…

深度 | 践行绿色健康可持续发展,这家企业提供了价值范本

文 | 螳螂观察 作者 | 余一 近段时间以来&#xff0c;小米SU7热度一直不减&#xff0c;在展露小米强大品牌号召力的同时&#xff0c;也侧面体现出了当前消费者对于新能源汽车的喜爱。 而消费者选择新能源汽车时&#xff0c;环保因素也起到了至关重要的作用。像前几日&#x…

数据结构-上三角矩阵存储方式[0知识掌握]

目标&#xff1a;看完本文章你将会了解上三角矩阵的存储方式以及矩阵中数据的位置索引号如何求 难点&#xff1a;上三角矩阵的公式推导&#xff0c;上三角任意位置对应的存储位置。 一、准备知识 1.求和公式 前n项和&#xff1a;Sn n(a1an)/2 公差&#xff1a;d后项-前项…

【JavaEE多线程】线程安全、锁机制及线程间通信

目录 线程安全线程安全问题的原因 synchronized 关键字-监视器锁monitor locksynchronized的特性互斥刷新内存可重入 synchronized使用范例 volatilevolatile能保证内存可见性volatile不保证原子性synchronized 也能保证内存可见性 wait 和 notifywait()方法notify()方法notify…

拖拽式工作流有哪几个优势?

在信息技术迅猛发展的今天&#xff0c;如何助力中小型企业在数字化转型的过程中平稳过渡&#xff1f;又是如何让中小型企业摆脱数据孤岛、成本投入高等各种瓶颈和难题&#xff1f;低代码技术平台是近些年较为理想的平台产品&#xff0c;其中拖拽式工作流优势特点突出&#xff0…

地埋电缆故障检测方法有哪些?地埋电缆故障检测费用是多少?

地埋电缆故障检测方法主要涵盖脉冲反射法、桥接法、高压闪络法和声波定位法等多种方法。选择适当的方法取决于故障类型、电缆类型和实际现场条件。至于地埋电缆故障检测费用则受到多个因素的影响&#xff0c;包括故障类型、检测方法的复杂性、检测设备的先进程度以及所处地区的…

从零开始搭建社交圈子系统:充实人脉的最佳路径

线上交友圈&#xff1a;拓展社交网络的新时代 线上交友圈是社交网络的新引擎&#xff0c;提供了更广泛的社交机会&#xff0c;注重共同兴趣的连接&#xff0c;强调多样性的社交形式&#xff0c;更真实地展示自己&#xff0c;让朋友更全面地了解我们的生活状态。虽然虚拟交往存在…

SD-WAN解决电商企业海外业务网络难题

全球化背景下&#xff0c;众多国内企业都涉及到海外贸易业务&#xff0c;尤其是出海电商得到蓬勃发展。企业做出海电商&#xff0c;需要访问国外网页、社交平台&#xff0c;如亚马逊、TikTok、Facebook、YouTube等与客户沟通互动&#xff0c;SD-WAN的发展正好为解决国际网络访问…

14 Php学习:表单

表单 PHP 表单是用于收集用户输入的工具&#xff0c;通常用于网站开发。PHP 可以与 HTML 表单一起使用&#xff0c;用于处理用户提交的数据。通过 PHP 表单&#xff0c;您可以创建各种类型的表单&#xff0c;包括文本输入框、复选框、下拉菜单等&#xff0c;以便用户可以填写和…

主存储器与CPU之间的连接(会画图)

位扩展 字扩展 由于只有A13&#xff0c; A14 连到了译码器上&#xff0c;以、因此该译码器是一个 2/4 译码器&#xff0c;对应的选片有四种。选中第一个选片&#xff0c;就是把译码器“0口置0&#xff0c; 1~3口置1”&#xff0c;因为CS有非号&#xff0c;因此&#xff0c;低电…

【C++】string的使用

目录 1、为什么学习string类&#xff1f; 2、标准库中的string类 2.1 string类 2.2 string类的常见接口声明 2.2.1 string类的常见构造 ​编辑 2.2.2 string类对象的访问及遍历操作 2.2.3 string类对象的容量操作 2.2.4 string类对象的修改操作 ​编辑 1、为什么学习s…

excel中vlookup查找值必须在table_array的第一列,有其他办法吗有XLOOKUP

vlookup查找值必须在table_array的第一列&#xff0c;有其他办法吗&#xff1f;有XLOOKUP。 vlookup 查找如下&#xff0c;查找值必须在table_array的第一列 如果下面&#xff0c;编码和名称交换位置&#xff0c;就不能使用vlookup查找了。 XLOOKUP 查找如下

Linux:进程调度

Linux&#xff1a;进程调度 进程优先级查看优先级调整优先级 Linux 2.6 内核进程调度队列 进程优先级 查看优先级 在Linux中&#xff0c;进程是有优先级的&#xff0c;我们可以通过指令ps -la来查看&#xff1a; 其中PRI表示priority优先级&#xff0c;在Linux中&#xff0c;…

解决 vue install 引发的 failed Error: not found: python2 问题

发生 install 异常时&#xff0c;提示信息如下所示&#xff1a; npm ERR! code 1 npm ERR! path U:\cnblogs\fanfengping-dtops\fanfengping-dtops-front\node_modules\node-sass npm ERR! command failed npm ERR! command U:\Windows\system32\cmd.exe /d /s /c node scripts…

基于Matlab机器人工具箱对Dobot机械臂的研究

文章目录 文章目录 前言 一、Dobot Mangician 分析 二、Matlab 机器人工具箱 1. 建立模型 2. DoBot 正向运动学 3. Dobot 逆运动学 4. Dobot workpace 5. Dobot轨迹规划 三、Dobot studio 1. DoBot teaching 2. DoBot Python 程序 总结 前言 在本实验中&#xf…

智能边缘计算采集网关助您远程调试SINAMICS S200伺服-天拓四方

您还在为每次调试都要去现场而烦恼吗&#xff1f;智能边缘计算采集网关助您远程调试SINAMICS S200伺服&#xff0c;让您足不出户&#xff0c;就能“运筹帷幄之中&#xff0c;决胜千里之外”。 新品介绍 SINAMICS S200 PN是西门子推出的新一代伺服驱动系统&#xff0c;采用Mot…

upload-labs第十一十二关

第十一关 $is_upload false; $msg null; if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_ext substr($_FILES[upload_file][name],strrpos($_FILES[upload_file][name],".")1);if(in_array($file_ext,$ext_arr)){$temp_file $_FILES[upload_fil…