cin>>,cin.get(),cin.getline()会把换行符留在缓冲区

(#1)cin>>,cin.get(),cin.getline()会把换行符留在缓冲区,而(#2)cin.get(),getline(),cin.getline会读入换行符。
原文链接:https://blog.csdn.net/a262624/java/article/details/87952612

所以,在使用了#1后,要使后面的#2输入能够正常读入,需要在后面加cin.get()或者cin.ignore(100, ‘\n’)。前者是从缓冲区中拿走换行符,后者是忽略点换行符。

c++ 中cin.ignore(100,’\n’);就是忽略cin中的前100个字符,或是’\n’之前的字符
(因为cin会屏蔽’\n’,所以后一个条件不会起作用,可以改成’#‘试试)。
如:
string str;
cin.ignore(5, ‘#’);
cin >> str;
cout << str << endl;
如果输入 “12345678”,回车,那么输出就是"678",因为字符中没有包含’#’,就是忽略前5个。
如果输入 “123#45678”,回车,那么输出就是"45678",忽略’#'之前的。
当然,如果总共输入的数据少于5,且没有"#",那就全忽略了。

可以把cin.ignore(x, y)中的参数看成两个条件,x条件表示忽略x个,y条件就表示忽略y之前的字符,y条件优先级高于x。
平常,我们单独用 cin>>str 的时候,流缓冲区里面还没有字符,那么执行这句之后就等待用户输入。
但是用了 cin.ignore之后,从这句就开始往流里面输入了,只不过输入到流里面的数据会按参数的要求去清除那些, 到后面这句 cin >> str的时候,流里面存在的是按条件清除之后的的数据,直接输出给str了。

参考地址:1.https://blog.csdn.net/wxbmelisky/article/details/48596881
2.https://blog.csdn.net/qq_38665104/article/details/82179096

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值