getline和cin.getline的区别

getline和cin.getline这两个函数很相似,先说getline吧,
1:getline有两个重载版本,第一个版本接受两个参数:
一个istream对象的引用(可以是istream&等);
第二个参数string对象的引用
顺便说一下,cin遇到空格,tab键就会结束输入(并且会忽略),按下回车后输入的字符才会发送到缓冲区:

# include<iostream>
# include<string>

using namespace std;

int main()
{
    string str,s;
    cin >> str;
    cin >> s;
    system("pause");
    return 0;
}

如图
这里写图片描述
输入one two TWO
由于one后面是空格,所以输入结束了,str就是”one”,然后由于缓冲区里还有“ two TWO”,cin会忽略空格,所以第一个空格不会赋值给s,同样的,s为two;

好了,现在来说第一个版本的getline:

# include<iostream>
# include<string>

using namespace std;

int main()
{
    string str,s;
    cin >> str;
    getline(cin, s);
    system("pause");
    return 0;
}

如图:和上一次输入一样
这里写图片描述
不同的是,s的值不一样,这是因为此版本的getline接受一个istream对象的引用,和一个string对象的引用,而空格,ta键会像普通字符一样赋值给s,遇到换行符结束,并且会丢弃换行符

第二个版本的getline新增加了一个参数,是字符类型的,表示终止符,遇到该终止符结束输入,并且不会丢弃换行符

# include<iostream>
# include<string>

using namespace std;

int main()
{
    string str,s;
    getline(cin, s);
    getline(cin, str, '~');
    system("pause");
    return 0;
}

如图:这里写图片描述
输入”one[空格]two[回车]
[回车]
three[空格]four[空格]five[回车]
six[回车]
~[回车]”
s为“one two”,由于丢弃了一个换行符,所以str为”\nthree four five\nsix\n”;而且此版本不会丢弃换行符,换行符还留在缓冲区中,可以验证一下:

# include<iostream>
# include<string>

using namespace std;

int main()
{
    string str,s;
    getline(cin, str, '~');
    getline(cin, s, '~');
    system("pause");
    return 0;
}

如图
这里写图片描述

这就是getline的用法了,此getline函数位于命名空间std中

2:cin.getline
第一个版本是接受两个参数,一个是字符数组首地址,第二个是表示个数
如图:这里写图片描述
这个版本的cin.getline和对应版本的getline很相似,区别是一个接受字符数组首地址和个数,另一个是istream类型string类型;
此版本遇到换行符或输入字符个数大于第二个参数就结束输入,也会丢弃换行符
如图:
这里写图片描述

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值