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

实际上你在每次输入数据的时候会输入一个回车 ‘\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')说忽略
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值