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

C++ cin.ignore() 的使用的更多相关文章

  1. cin.ignore()函数的用法

    cin.ignore(a,ch)方法是从输入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用.每抛弃一个字符,它都要计数和比较字符:如果计数值达到a或者被抛弃的字符是ch,则cin. ...

  2. c++cin.ignore()

    c++ 中cin.ignore(100,'\n'); 的作用是清除输入流中多余的字符请问这句话是什么意思? 可以举个例子吗? 提问者采纳 这个其实就是忽略cin中的前100个字符,或是'\n'之前的字 ...

  3. cin.ignore

    功能:函数用于输入流.它读入字符,直到已经读了num 个字符(默认为1)或是直到字符delim 被读入(默认为EOF).其调用形式为cin.ignore(n,终止字符)       原型:istrea ...

  4. C++ cin.ignore()用法

    cin.ignore(int a,char b); a为一行中最大读取字符长度,b为某一个字符.在缓冲区中寻找b,找到后忽略b以前的所有字符(包括b).如果在a的范围内还没有找到b,则忽略b以前的所有 ...

  5. 【PAT甲级】1077 Kuchiguse (20 分)(cin.ignore()吃掉输入n以后的回车接着用getine(cin,s[i])输入N行字符串)

    题意: 输入一个正整数N(<=100),接着输入N行字符串.输出N行字符串的最长公共后缀,否则输出nai. AAAAAccepted code: #include<bits/stdc++. ...

  6. 关于cin,getchar(),scanf()的注意事项(转)

      问题描述一:(分析scanf()和getchar()读取字符) scanf(), getchar()等都是标准输入函数,一般人都会觉得这几个函数非常简单,没什么特殊的.但是有时候却就是因为使用这些 ...

  7. C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法----细节决定成败 (sort用法)

    C++中cin.cin.get().cin.getline().getline().gets()等函数的用法 学C++的时候,这几个输入函数弄的有点迷糊:这里做个小结,为了自己复习,也希望对后来者能有 ...

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

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

  9. c++清除输入缓冲区之 sync() vs ignore()

    最近在写程序的时候总是不注意输入缓冲区内是否还有东西,导致出现了一些异常,调试了半天.所以来上一贴,学习注意,引以为戒! http://blog.chinaunix.net/uid-21254310- ...

随机推荐

  1. js 及jQery

    1.jQuery即是对象也是类. 2.append()方法的使用,连加操作. 例子: $(function(){ var obj=new Object(); obj.id=$("input[ ...

  2. 为什么删除的Ceph对象还能get

    前言 在很久以前在研究一套文件系统的时候,当时发现一个比较奇怪的现象,没有文件存在,磁盘容量还在增加,在研究了一段时间后,发现这里面有一种比较奇特的处理逻辑 这套文件系统在处理一个文件的时候放入的是一 ...

  3. 如何使用GitHub创建Maven私有仓库

    [Github上创建仓库] 首先,在GitHub上创建自己的仓库(mvn-repo): [配置本地setting文件] 找到本地的maven settings文件,配置server: 有两种选择,可以 ...

  4. springMVC中添加<mvc:resource>时的问题

    为了解决SpringMVC在使用<url-pattern>/</url-pattern>时会屏蔽掉所有静态资源的问题 在springMVC.xml 配置文件中加入了如下代码: ...

  5. 重闯Sqli-labs关卡第二天(5关)

    第五关(双注入GET单引号字符型注入-报错时间注入) 盲注盲注,Blind SQL Injection基于布尔SQL盲注基于时间的SQL盲注基于报错的SQL盲注 核心代码:(不会返回数据库中的数据) ...

  6. sql字段长度等于

    select count(*) from boc_loan_apply where length(birthday)=7;

  7. 使用CleanMyMac快速管理应用程序 优化Mac

    CleanMyMac作为一款专业的苹果电脑清理软件,它不仅仅能单纯的卸载不用.少用的应用,同时还支持:1.清理应用程序的数据文件,将应用重置回初始状态,减少空间占用:2.自动检查应用更新,保持应用的最 ...

  8. 详解pdfFactory的页面管理功能

    当我们将文档载入到pdfFactory 之后才发现文档中存在着一些乱页现象.那么是否需要重新整理文档后,再重新载入到软件中呢?实际上,不需要. pdfFactory专业版提供了高效的页面管理功能,用户 ...

  9. AFNetWorking 丢失数据

    问题描述: 使用AFNetWorking请求数据,请求成功,但是拿不到所需要的数据,但是使用其他平台都可以拿到数据. 原因分析: AFNetWorking无法解析. 解决方式: AFJSONRespo ...

  10. 基于Vue、Springboot网站实现第三方登录之QQ登录,以及邮件发送

    基于Vue.Springboot实现第三方登录之QQ登录 前言 一.前提(准备) 二.QQ登录实现 1.前端 2.后端 1.application.yml 和工具类QQHttpClient 2.QQL ...