C++ cin.get()与cin.getline() 二者区别

在C++中,我们通常使用cin来来获取键盘输入的字符,但是cin会利用空白(空格、制表符和换行符)来确定字符串的结束位置,这意味着如果我们要输入的文本中间含有一个空白符号的话,将不能完全正确的数据读取操作,例如,如果我们使用代码cin<<name,来将一个人名读取到变量name中,当我们输入Steve Jobs时,name中存储的值只有空白符之间的字符,而不会存储Jobs。因此,我们需要另一种字符读取方式——面向行的输入:getline()与get()


getline()函数读取整行,它通过回车键输入的换行符来确定结尾,一般使用时传入两个参数,第一个参数用来存储输入行的变量名,第二个参数是要读取的字符个数,如:

cin.getline(name,20)
这行代码表示会将一行字符中的19个读入到那么数组中,最后一个位置用于存储在结尾自动添加的空白符

同样get()函数也可以完成上述功能。

下面我们来谈谈这两个面向行输入函数的区别:

1.在读取空行时:

getline()会在前一条语句结束读取的位置开始读取

而get()在读取空行后将设置失效位(failbit),这意味着接下来的输入将被中断

2.关于换行符:

二者都以换行符为终止符号,但是它们对换行符的处理不同,前者会直接将换行符从输入缓冲区中去除,而后者会将其保留在缓冲区中,由于get()会将换行符保留在缓冲区中,因此我们往往需要再次调用get()来将换行符从缓冲区中读取出来,以便后续的正常读取,一般利用如下形式来完成该操作:

cin.get(name).get()
朋友们可能会觉得这样调用很麻烦,实际上,这有助于我们调试代码,因为在实际使用中,我们无法得知停止读取的原因是由于已经读取了整行,还是由于字符数组已经填满,而利用这种方式,我们可以查看下一个输入字符,如果是换行符,说明已经读取了整行;否则,说明改行还有其他输入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值