cin, getline() 与 get() 的区别
由于cin
使用空白(空格,制表符,换行符)来确定字符串结束位置
所以我们在面对一些有包含空格的字符串输入时,cin
就无能为力
我们可以使用getline()
或者get()
对字符串进行输入,但是这两者有什么区别呢?
1.getline()
getline()
函数通过回车键输入的换行符来确定输入的结尾,并将换行符丢弃
这个函数有两个参数,一个是用来存储输入行的数组名称,一个是获取的字符数目。
例如getline(name,20)
是将字符数目20的字符串输入到name
数组中
2.get()
get()
的使用参数和getline()
是相同的,但是get()
并不丢弃换行符,会将其留在输入的队列中。
所以如果第二次使用get()
时,由于换行符的存在,get()
会误认为已经读取结束导致换行符后面的字符不能正确的输入
解决这种情况,我们可以使用一次get()
读取换行符后,再使用get()
读取后面的字符
例如对于abc def
我们可以
cin.get(a,20)
cin.get()//读取换行符
cin.get(b,20)
看这样子,好像getline()
比get()
更简单?
不是的,这两个函数的出现是有着一定道理的。
get()
比getline()
能够更仔细的分辨出字符串是因为空间填满停止读取,还是真正读取结束。
判断方法是接下来一行再使用一次get()
,如果下一次的get()
内容是换行符,那么是正常读取结束,如果不是那就是空间不够导致的中断。