开发者社区> 问答> 正文

C++中get与getline的区别?

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

展开
收起
a123456678 2016-03-06 11:42:30 2155 0
1 条回答
写回答
取消 提交回答
  • 分为三种情况来看:
    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来说空行是合法的输入,且不会影响下面的输入处理。
    虽说是复制的,但是基本的讲解的还算是清楚

    2019-07-17 18:54:21
    赞同 展开评论 打赏
问答分类:
C++
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载