C++ cin.sync()和cin.ignore()
cin.sync()的功能是清空缓冲区,而cin.ignore()虽然也是删除缓冲区中数据的作用,但其对缓冲区中的删除数据控制的较精确。
有时候你只想取缓冲区的一部分,而舍弃另一部分,这是就可以使用cin.ignore(),其使用方法是:
cin.ignore(int intExp, char chExp);
其中intExp 是一个整型表达式,也可以是一个整型数值,这个数值表示在一行中忽略的字符的最大数目,比如说intExp=100;还有一个参数chExp,是一个字符表达式。表示如果遇到一个字符值等于chEXP,那么就停止ignore(),如果ignore100个字符之后还没遇到值等于chEXP的字符,那也得停止ignore(),所以100是ignore()所忽略的最大字符数。
下面是几个例子
#include<iostream>
#include<cstdlib>
int main()
{
int ival1 = 0, ival2 = 0;
std::cin >> ival1;
std::cin.ignore(100, '\n');
std::cin >> ival2;
std::cout << "ival1 = " << ival1 << std::endl;
std::cout << "ival2 = " << ival2 << std::endl;
system("pause");
return 0;
}
①按下Enter后,ival1接收了12,剩余的都被清除掉了,因为Enter就是本身就是空行符,然后输入流会等待第二次输入为ival2赋值。如过没有中间那句std::cin.ignore(100, '\n') ,则不会等待第二次输入,直接输出ival1 = 12 ival2 = 34:
②把std::cin.ignore(100, '\n') 改成std::cin.ignore(2, '\n')呢,ival1接收了12之后,ignore清除掉两个字符:
为什么ival2是4而不是78呢?
因为我们所用的IO对象cin cout 都是操纵char数据的,不管我们输入的是什么数据,cin cout 都会转成 char来处理,例如我们想要输出的是一个整形变量的值,那么在输出前,cout会将该变量的值转成字符,在进行输出(C++ Primer Plus中有一句话:In essence, the C++insertion operatoradjusts its behavior to fit the type of data that follows it.),所以上面ignore清除掉了一个空格和一个字符3,所以缓冲区中剩余4、56、78,所以ival2等于4.
③如果cin.ignore()不给参数,则默认参数为cin.ignore(1,EOF),即把EOF前的1个字符清掉。
C++ cin.sync()和cin.ignore()相关推荐
- cin.clear、cin.sync()与cin.ignore()
一.cin.clear().cin.sync() cin.clear()是用来更改cin的状态标示符的. cin.sync()是用来清除缓存区的数据流的. 如果标示符没有改变那么即使清除了数据流也无法 ...
- cin输入问题的处理:cin.clear() 、cin.sync() 、cin.ignore()
1.cin.clear():清除cin流的错误状态,将错误标识改为默认0 2.cin.sync():清除缓冲区的数据 3.cin.ignore(): 其原型为: istream & ignor ...
- cin、cin.get()、cin.getline()、getline()的区别
测试平台g++ 5.4.0和VS2015社区版. 输入原理简述: 程序的输入都建有一个缓冲区,即输入缓冲区.每次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输 ...
- C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
学C++的时候,这几个输入函数弄的有点迷糊:这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行) 1.cin 2.cin.ge ...
- C++中cin、cin.get()、cin.getline()、getline()等函数的用法
转载:http://www.cnblogs.com/flatfoosie/archive/2010/12/22/1914055.html c++输入流函数主要以下几个: 1.cin 2.cin.get ...
- 【转载】C++中cin、cin.get()、cin.getline()、getline()、gets()函数详解
学C++的时候,这几个输入函数弄的有点迷糊:这里做个小结: 1.cin 2.cin.get() 3.cin.getline() 4.getline() 5.gets() 6.getchar() 附:c ...
- cin.get()和cin.getline()之间的区别
cin.getline()和cin.get()都是对输入的面向行的读取,即一次读取整行而不是单个数字或字符,但是二者有一定的区别. cin.get()每次读取一整行并把由Enter键生成的换行符留在输 ...
- 11.C++: cin、cin.get()、cin.getline()、getline()、gets()
在学习C++的过程中,经常会遇到输入输出的问题,以下总结一下下面几个函数的用法: 1).cin 2).cin.get() 3).cin.getline() 4).getline() 5).gets() ...
- C++中cin、cin.get()、cin.getline()、getline()、gets()、getchar()、scanf()等函数的用法
转自:https://www.cnblogs.com/luolizhi/p/5746775.html 1.cin>> 用法1:最基本,也是最常用的用法,输入一个数字: #include & ...
最新文章
- mysql从库同步delete不动了_MySQL主从同步报错故障处理集锦
- vsftpd配置文件丢失
- android滚动条布局横向,Android自定义ViewGroup实现可滚动的横向布局(2)
- log4net 在asp.net WEB应用程序中的配置
- 1001.双系统互联的坑
- 安装ceston8出现timeout_瓦罗兰特Valorant:显示逾时怎么办 瓦罗兰特time out解决
- java对接支付宝微信银联_经典设计模式之策略模式【如何重构聚合支付平台,对接【支付宝,微信,银联支付】】(示例代码)...
- hiberanate 主键查询慢_hibernate 新加数据 查询 缓存 变慢
- python赋值标志_Python中的赋值、引用和深浅拷贝
- Windows11升级绕过不支持该处理器
- PIM SM报文抓包和总结
- WINDOWS NPAPI插件小结
- 1.Sigar介绍和配置
- idea中使用git提交代码步骤
- 知识积累:wps宏 开发工具 vb代码 合并多个excel文件到一个excel文件,并去掉表头的方式,宏合并excel表格,多表格合并
- JEB动态调试debug模式
- 什么是数据脱敏,数据脱敏有哪些方式
- Hyperledger Fabric 2.0 官方文档中文版 第6章 教程(上)
- python根据x轴、y轴坐标在坐标轴里画出曲线图
- 用Excel生成Ansys *VREAD函数所需的具有固定字符长度和小数位数的数据
热门文章
- Java反序列化json内存溢出_fastJson与一起堆内存溢出'血案'
- php mysql 常用语句_PHP mysql基本语句指令
- python删除字符串中指定_python删除字符串中指定字符
- ci 地址去掉index.php,CI框架如何删除地址栏的 index.php
- stc单片机485发送多出一字节_单片机干货!STC8H案例制作分享(内含高清实物动图)...
- python操作界面_Python使用PyQt5的Designer工具创建UI界面
- 计算机专业带给我们的启示,一次电脑网络调查带给我的启示
- yii2 html ul,yii2导航小部件子菜单类
- pat 乙级 1004 成绩排名(C++)
- 【渝粤教育】 国家开放大学2020年春季 1032成本管理 参考试题