关于C++中getline引发的问题

      今天在编程的时候遇到了一个小问题,着实困惑了我很久。就是当我前边输入一个数并以回车结束时,这个回车符自动地被getline捕捉,当然,我想输入的根本不是这个回车符。

请看图:

                   

       当我输入n的值为2 并以回车为结束的时候,下边的循环直接进行了两次。原因可以分为两方面,第一是默认情况下,getline以‘\n’为结束标志,如果你把getline的第三个参数设置为‘#’,则不会出现上述情况。第二,从输入的六状态找原因,网上的答案有的说用cin.clear(),有的说要cin.clear()和cin.ignore()一起用才有效。在这里我参考了网上的各种版本以及自己的实践经历总结如下:

cin.clear():重置流的状态,使之有效。也就是说如果想要消除错误输入的影响,需要添加此函数。

cin.ignore(): 忽略当前缓冲区的第一个字符(即回车)。

所以要结合自己的情况使用这两个函数,事实是在我的函数中值需要使用cin.ignore()就可以了。 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值