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

来源:互联网 发布:大数据的由来 编辑:程序博客网 时间:2024/06/08 00:54

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

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孕妇尿糖2个加号怎么办 孕妇尿糖3个加号怎么办 孕妇酮体4个加号怎么办 来月经量少发黑怎么办 月经量少且发黑怎么办 验孕试纸不加深怎么办 刚怀孕染了头发怎么办 2个月宝宝不吃奶怎么办 孕妇尿隐血1十是怎么办 尿葡萄糖2个加怎么办 孕妇尿葡萄糖2加怎么办 尿的蛋白高怎么办治疗 孕妇尿蛋白高是怎么办 孕妇尿细菌数高怎么办 孕妇尿细菌很高怎么办 尿微量总蛋白高怎么办 衣服上碳素笔油怎么办 卡油泵总成坏了怎么办 汽车燃油泵坏了怎么办 新车汽油泵坏了怎么办 墓地的树枯死了怎么办 大车尿素不烧了怎么办 不烧尿素限扭怎么办 汽车首保过期了怎么办 假体隆鼻后透光怎么办 熊猫血有抗体了怎么办 rh阴性血怀二胎怎么办 熊猫血怀二胎了怎么办 rh阴性血要二胎怎么办 全血粘度都偏高怎么办 血脂高血粘度高怎么办 全血粘度值1偏高怎么办 全血粘度3偏高怎么办 血粘度高的症状怎么办 粉瘤感染化脓了怎么办 乌药剂量用大了怎么办 水卡消磁了怎么办妙招 电卡消磁了怎么办妙招 入园磁卡消磁了怎么办 透析中静脉压高怎么办 腰间盘突出压迫神经腿疼怎么办