2 qq 24850089 qq_24850089 于 2015.05.30 13:58 提问

C++中get与getline的区别?
c++

两者cin.get和cin.getlie有什么区别,什么时候用哪一个比较好

6个回答

zhengyuxuan1125
zhengyuxuan1125   2015.06.01 09:03
已采纳

分为三种情况来看:
1)输入的字符串不超过限定大小
get(str,Size):读取所有字符,遇到'\n'时止,并且将'\n'留在输入缓冲区中,其将被下一个读取输入的操作捕获,影响该输入处理;
getline(str,Size):读取所有字符,遇到'\n'时止,并且将'\n'直接从输入缓冲区中删除掉,不会影响下面的输入处理。

2)输入的字符数超出限定的大小
get(str,Size):读取Size-1个字符,并将str[Size-1]置为'\0',然后将剩余字符(包括'\n')留在输入缓冲区中,这些字符将被下一个读取输入的操作捕获,影响该输入处理;
getline(str,Size):读取Size-1个字符,并将str[Size-1]置为'\0',剩余字符(包括'\n')留在输入缓冲区中,随即设置cin实效位(即if(!cin)的判断为真),关闭输入。其后的所有输入都无法得到任何东西,当然也无法得到输入缓冲区中剩余的字符串。但如果象本例一样用clear()重置cin,其后的输入便可用并会得到遗留在输入缓冲区中的字符。

3)输入一个空行(即直接回车)
get(str,Size):str将得到'\0',并设置cin实效位,关闭输入,但回车依然留在输入缓冲区中,因此如果我们用clear()重置cin,其下一个读取输入的操作将捕获'\n';
getline(str,Size):str将得到'\0',并将'\n'删除掉,不置实效位,不关闭输入。所以对于cin.getline来说空行是合法的输入,且不会影响下面的输入处理。
虽说是复制的,但是基本的讲解的还算是清楚

autocyz
autocyz   2015.05.30 14:18

http://laomaizi.blog.51cto.com/487070/105281/
这篇博客解答了你的问题,请自己阅读。

caozhy
caozhy   Ds   Rxr 2015.05.30 14:21

顾名思义,一个是获取一个字符,一个是获取一行。
看你的需求决定。

henuyx
henuyx   2015.05.30 15:52

这两个能少用就少用,尤其是getline

你想啊,一下读一行,谁知道一行有多少个字符,你是不是还要放一个很大的buffer在那里,但是要多大的呢?

那谁规定了一行必须在多少个字符一下了?

一次读一个不知道长度的字符串,多危险啊!

qq_24850089
qq_24850089 有道理
2 年多之前 回复
qq_24850089
qq_24850089 有道理
2 年多之前 回复
edouardzyc
edouardzyc   2015.05.30 18:59

cin.get 读取输入的一个字符
cin.getline 读取输入的一行字符

u012377333
u012377333   Rxr 2015.05.31 14:55

get 读一个字符
getline 读一行字符

Csdn user default icon
上传中...
上传图片
插入图片