实际上你在每次输入数据的时候会输入一个回车 ‘\n'
cin在读入整数时候会忽略空白碰到非数字('\n')时停止
cin在getline时会把'\n'及之前的内容读回来,哪怕是空行也会读入
cin在读入字符时会把缓冲区内当前字符读入(不会忽略空白)
cin.ignore(1000, '\n')的含义是把缓冲区内从当前字符开始知道'\n'之前字符(如果有1000个的话)忽略掉,实际上你这里假设一行不会超过1000个字符,所以含义是忽略一行如果你想输入a=1,b=2 name="xxxx", c='y'
所以你的输入是
1回车2回车xxxx回车y回车
cin读入a=1 碰到回车停止 此时1后面的回车还在缓冲区里
cin读b=2时忽略2前面的回车但是停止在2后面的回车
此时你如果掉getline 就会读入一个2后面回车前面的也就是空行 因此此时应当调用一个cin.ignore(1000,'\n')把这个\n忽略掉
追问
我大概懂点了,但是我还是不明白为什么放在getline后面它就会让我输name了,按道理应该不也是直接跳过吗?
回答
读入b变量的后边必须加一个cin.ignore(1000,'\n')
用来去掉那一行的'\n'
不然b后的getline就不用输入就读到一个空行 这个时候输出就变成了
name:c:了
追问
不是。。我的意思是
【我试过了如果没有cin.ignore(1000, '\n'),或者把它放在 cin a/cin c后,那么它就不会让我输入name直接让我输入c。
如果放在cin b后,就没问题。
如果放在getline cin name后,它虽然会让我输入name,但是后来的输出表明name值为空。】
这里的第三点,我不明白
回答
如果放在getline cin name后,它虽然会让我输入name,但是后来的输出表明name值为空。
这是你理解错了放在getline cin name后 实际不是让你输入name 此时name已经被读入是b后那个换行符 cin.ignore(1000, '\n')让你的界面停住了 你输入任何数据正好被cin.ignore(1000, '\n')说忽略

关于C++中cin.ignore()的问题相关推荐

  1. c++ 标准库中 cin.ignore()

    cin.ignore()函数是C++标准输入流(cin)中的一个方法.cin.ignore()函数中有两个参数,分别为数值型的a 和 字符型的 ch ,即cin.ignore( a, ch ).它表示 ...

  2. 一文读懂C++中的cin.ignore()

    cin.ignore(int intExp, char chExp); 1.作用: 从缓冲区舍弃前intExp个字符(char):如果在舍弃的过程中遇到了chExp,就舍弃掉chExp,然后退出. 也 ...

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

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

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

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

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

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

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

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

  7. C++ cin.sync()和cin.ignore()

    cin.sync()的功能是清空缓冲区,而cin.ignore()虽然也是删除缓冲区中数据的作用,但其对缓冲区中的删除数据控制的较精确. 有时候你只想取缓冲区的一部分,而舍弃另一部分,这是就可以使用c ...

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

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

  9. 02头文件的冲突导致,清除缓冲区失败之cin.ignore() 问题

    输入任意多个整数, 把这些数据保存到文件data.txt中. 如果在输入的过程中, 输入错误, 则提示用户重新输入. 指导用户输入结束(按ctrl + z) [每行最多保存4个整数] 可能遇到的 ci ...

最新文章

  1. android 增加一条广播,Android中BroadcastReceiver广播使用及注意点
  2. Oracle 高性能SQL引擎剖析----执行计划
  3. c++学习笔记之基础---类内声明函数后在类外定义的一种方法
  4. Linux内核移植之二:Kconfig分析
  5. guava中的Splitter
  6. 转:pytorch版的bilstm+crf实现sequence label
  7. Nginx/Apache发大招
  8. 基于Redis、Storm的实时数据查询实践
  9. 唯一《可解释机器学习》中文书来了:复旦研究生翻译,原作者转发点赞
  10. java 获取本机的ip和mac_java获取本机ip和mac地址
  11. 优麒麟(Ubuntu Kylin)安装日志
  12. 腾讯云推出首款自研服务器星星海;苹果新款Mac Pro整套配齐超30万;Fedora 31稳定版发布|极客头条...
  13. 原创:CSS3技术-雪碧图自适应缩放与精灵动画方案
  14. buf.readInt8函数详解
  15. vs怎么换背景颜色?
  16. vue中headers是什么_vue在响应头response中获取自定义headers操作
  17. 时域分析——有量纲特征值含义一网打尽
  18. 5位数的数字黑洞是多少_数字黑洞求解问题
  19. 电脑卡住点什么都没反应怎么解决
  20. 2012年华为杯校园编程大赛决赛 类别:软件C/C++语言

热门文章

  1. python内置数据结构方法的时间复杂度
  2. ylbtech-Bill(发票管理)-数据库设计
  3. C# 简单日志文本输出
  4. 考驾照科目一考试很顺利
  5. 有1000阶的台阶,一个人每次只能走一阶或两阶,用一个递归算法求出共有多少种走法。...
  6. Linux下限制用户通过SFTP访问指定目录
  7. JS数组关联查找的性能优化
  8. 记录一次通过抓包解决Zabbix no active checks on server
  9. 从零开始写项目第八篇【将未完成的项目发布在Tomcat上】
  10. Django 踩过的坑(二)