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 operator adjusts 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个字符清掉。

原文链接

cin.ignore()详解相关推荐

  1. C++学习45 流成员函数put输出单个字符 cin输入流详解 get()函数读入一个字符

    在程序中一般用cout和插入运算符"<<"实现输出,cout流在内存中有相应的缓冲区.有时用户还有特殊的输出要求,例如只输出一个字符.ostream类除了提供上面介绍过 ...

  2. C++—— cin输入流详解

    标准输入流是从标准输入设备(键盘)流向程序的数据.在头文件iostream.h中定义了cin.cout.cerr.clog 4个流对象,cin是输入流,cout.cerr.clog是输出流. cin是 ...

  3. mysql ignore详解_MySQL replicate-ignore-db详解

    官方的解释是:在主从同步的环境中,replicate-ignore-db用来设置不需要同步的库.解释的太简单了,但是里面还有很多坑呢.生产库上不建议设置过滤规则.如果非要设置,那就用Replicate ...

  4. C++输入cin应用详解

    输入原理: 程序的输入都建有一个缓冲区,即输入缓冲区.一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据.正因为cin函数是直接从缓冲区取数据 ...

  5. C++中getline()与cin.getline()详解

    参考1:https://www.jb51.net/article/180408.htm 参考2:https://www.cnblogs.com/ymd12103410/p/9514896.html

  6. c语言putchar与getchar,C语言中的getchar和putchar详解

    首先给出<The_C_Programming_Language>这本书中的例子: #include int main() { int c; c = getchar(); while (c  ...

  7. 一眼就能看懂的cin.ignore()函数详解

    看了很多网上的cin.ignore()函数的解析,发现万片一律,不知道是你抄我的还是我抄你的,还都没有注明转载,而且纯粹是教科书的死搬硬套. 希望我的这篇博客可以帮到大家. 首先,他的函数原型是这样的 ...

  8. C++ cin 详解之终极无惑

    代码编译运行环境:VS2017+Win64+Debug. 文章目录 1.简介 2.常用输入方法 2.1 cin>> 的用法 2.2 cin.get() 的用法 2.2.1 cin.get( ...

  9. 对于刷oj时因为scanf()出现wa而cin却AC的详解 【scanf() 和 cin 详解】

    故事还得从昨天讲起,昨天做了一道题及其的诡异,用cin输入AC了.用scanf()却一直的报错或者陷入了 死循环.这让我很费解,我用了fflush(stdin)来排除,发现没有效果.后来我想起之前写过 ...

最新文章

  1. 2019前沿信息科技创新论坛成功举办
  2. comsol线圈不能加电流激励_为什么电压互感器不能短路,电流互感器不得开路?...
  3. Reference resources
  4. 多索引表 (5)创建多索引表
  5. windows下如何查看设备的idVendor(厂商标识)和idProduct(产品标识)?
  6. python与正则表达式(part4)--正则表达式分组
  7. c#将list集合转换为datatable的简单办法
  8. Java IdentityHashMap values()方法与示例
  9. 66Linux主机名和hosts67网络配置小结
  10. Movie Thumbnails Maker Mac(MTM)使用指南
  11. 【java面试题】equals()方法和==的比较区别?
  12. 关于OptiStruct提问的一些建议
  13. 如何去掉CAD教育版打印戳记
  14. Unity:发布WebGL遇到的坑
  15. 【Python游戏】实现一个恶搞游戏,粉丝大战xxx小游戏(狗头保命) | 附带源码
  16. 2017美国数学建模ICM D题 优化机场安全的乘客吞吐量检查点(Optimizing the Passenger Throughput at an Airport Security Checkpo)
  17. python中使用python-dotenv管理环境变量
  18. Java IDE - Selenium 包下载
  19. Will not attempt to authenticate using SASL (unknown error) (org.apache.zookeeper.ClientCnxn)
  20. 2023年了,还是没学会内卷....

热门文章

  1. Linux 下分区表的备份与恢复
  2. 飞鸽传书linux进程退出不彻底
  3. 《FBI教你破解身体语言》书摘
  4. 信管网 - 信息系统项目管理师专业网站!
  5. 【备忘】AMD 显卡驱动问题一则及解决方案
  6. t12电烙铁c语言程序,做一把精致的T12数控电烙铁
  7. IBM Storwize v3500存储故障维修支持
  8. 求知讲堂Java视频-基础整理-数据类型
  9. 使用CXF框架开发WebService客户端
  10. 直播与知识变现平台的现状分析和主流产品调研