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()相关推荐

  1. cin.clear、cin.sync()与cin.ignore()

    一.cin.clear().cin.sync() cin.clear()是用来更改cin的状态标示符的. cin.sync()是用来清除缓存区的数据流的. 如果标示符没有改变那么即使清除了数据流也无法 ...

  2. cin输入问题的处理:cin.clear() 、cin.sync() 、cin.ignore()

    1.cin.clear():清除cin流的错误状态,将错误标识改为默认0 2.cin.sync():清除缓冲区的数据 3.cin.ignore(): 其原型为: istream & ignor ...

  3. cin、cin.get()、cin.getline()、getline()的区别

    测试平台g++ 5.4.0和VS2015社区版. 输入原理简述: 程序的输入都建有一个缓冲区,即输入缓冲区.每次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输 ...

  4. C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法

    学C++的时候,这几个输入函数弄的有点迷糊:这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行) 1.cin  2.cin.ge ...

  5. C++中cin、cin.get()、cin.getline()、getline()等函数的用法

    转载:http://www.cnblogs.com/flatfoosie/archive/2010/12/22/1914055.html c++输入流函数主要以下几个: 1.cin 2.cin.get ...

  6. 【转载】C++中cin、cin.get()、cin.getline()、getline()、gets()函数详解

    学C++的时候,这几个输入函数弄的有点迷糊:这里做个小结: 1.cin 2.cin.get() 3.cin.getline() 4.getline() 5.gets() 6.getchar() 附:c ...

  7. cin.get()和cin.getline()之间的区别

    cin.getline()和cin.get()都是对输入的面向行的读取,即一次读取整行而不是单个数字或字符,但是二者有一定的区别. cin.get()每次读取一整行并把由Enter键生成的换行符留在输 ...

  8. 11.C++: cin、cin.get()、cin.getline()、getline()、gets()

    在学习C++的过程中,经常会遇到输入输出的问题,以下总结一下下面几个函数的用法: 1).cin 2).cin.get() 3).cin.getline() 4).getline() 5).gets() ...

  9. C++中cin、cin.get()、cin.getline()、getline()、gets()、getchar()、scanf()等函数的用法

    转自:https://www.cnblogs.com/luolizhi/p/5746775.html 1.cin>> 用法1:最基本,也是最常用的用法,输入一个数字: #include & ...

最新文章

  1. mysql从库同步delete不动了_MySQL主从同步报错故障处理集锦
  2. vsftpd配置文件丢失
  3. android滚动条布局横向,Android自定义ViewGroup实现可滚动的横向布局(2)
  4. log4net 在asp.net WEB应用程序中的配置
  5. 1001.双系统互联的坑
  6. 安装ceston8出现timeout_瓦罗兰特Valorant:显示逾时怎么办 瓦罗兰特time out解决
  7. java对接支付宝微信银联_经典设计模式之策略模式【如何重构聚合支付平台,对接【支付宝,微信,银联支付】】(示例代码)...
  8. hiberanate 主键查询慢_hibernate 新加数据 查询 缓存 变慢
  9. python赋值标志_Python中的赋值、引用和深浅拷贝
  10. Windows11升级绕过不支持该处理器
  11. PIM SM报文抓包和总结
  12. WINDOWS NPAPI插件小结
  13. 1.Sigar介绍和配置
  14. idea中使用git提交代码步骤
  15. 知识积累:wps宏 开发工具 vb代码 合并多个excel文件到一个excel文件,并去掉表头的方式,宏合并excel表格,多表格合并
  16. JEB动态调试debug模式
  17. 什么是数据脱敏,数据脱敏有哪些方式
  18. Hyperledger Fabric 2.0 官方文档中文版 第6章 教程(上)
  19. python根据x轴、y轴坐标在坐标轴里画出曲线图
  20. 用Excel生成Ansys *VREAD函数所需的具有固定字符长度和小数位数的数据

热门文章

  1. Java反序列化json内存溢出_fastJson与一起堆内存溢出'血案'
  2. php mysql 常用语句_PHP mysql基本语句指令
  3. python删除字符串中指定_python删除字符串中指定字符
  4. ci 地址去掉index.php,CI框架如何删除地址栏的 index.php
  5. stc单片机485发送多出一字节_单片机干货!STC8H案例制作分享(内含高清实物动图)...
  6. python操作界面_Python使用PyQt5的Designer工具创建UI界面
  7. 计算机专业带给我们的启示,一次电脑网络调查带给我的启示
  8. yii2 html ul,yii2导航小部件子菜单类
  9. pat 乙级 1004 成绩排名(C++)
  10. 【渝粤教育】 国家开放大学2020年春季 1032成本管理 参考试题