getline()函数的使用

最近刷题一直涉及到getline()这个函数,所以做一个简单的小结。

getline与cin的区别

getline()函数用于一行输入,会输入一行内所有的字符串包括空格与换行符(空白符),而对于cin来说只能输入空白符前的字符串,也就是说只能输入一个单词而不能用于整行输入。空白符后的字符串包括空白符都会保留在缓冲区中。而这往往会影响程序后面的输入。

getline函数的用法

getline(std::cin,str)

表示会将输入的一行字符串给string类型的变量str。在使用getline的时候尤其需要注意输入缓冲区的情况,以下面的情况为例。

int n;
cin>>n
//getchar();
string str;
getline(std::cin,str);

本来应该是希望输入完数字后,再输入str的。但是因为cin抛弃了换行符,将换行符留在了缓冲区中,所以根本不会输入我们想要输入的内容给str,而是将换行符给了str。为了正确的输入必须要先用getchar()再getline()前”吃掉“这个多余的换行符。

还有一种情况要注意的情况

int n;
cin>>n;
//getchar();
for(int i=0;i<n;i++)
   getline(std::cin,str[i]);

这里的str是作为一个string类型的数组。同样是会多出换行符的情况,getchar()必须要放在循环的前面。如果放在循环体中,除了第一轮循环能够正常地”吃掉“多余的换行符外,这个多余的换行符是由cin抛弃而产生的,剩下的循环次数中是不会有多余的换行符的。因为getline()会输入一整行中的所有内容包括换行符,所以如果再用getchar()在循环体中,反而会”吃掉“每次正常输入的第一个字符。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值