C++中cin输入和getline的区别

本文讲解了C++中cin读取字符串的问题,介绍getline函数的作用,以及为何在使用cin读取数字后接getline可能导致意外的换行符问题。通过实例展示了如何避免这种问题,并提供了在处理字符串比较时的代码片段。
摘要由CSDN通过智能技术生成

``虽然可以使用 cin 和 >> 运算符来输入字符串,
当 cin 读取数据时,
一旦它接触到第一个非空格字符即开始阅读,
当它读取到下一个空白字符时,它将停止读取。
为了解决这个问题,
可以使用一个叫做 getline 的 C++ 函数。
此函数可读取整行,包括前导和嵌入的空格,
并将其存储在字符串对象中。
在使用getline读入一整行时,
若是前面是使用getchar()、cin这类读入了一个字母,
但是不会读入后续换行\n符号或者空格的输入时,再接getline()就容易出现问题。

这是因为输入数字之后,敲回车,产生的换行符仍然滞留在输入流了,
接着就被getline(cin,s)给读进去了,
此时的s=“\n”,所以实际上s只是读入了一个换行符\n。

而若是前面使用getline(),再又用getline()进行读入,此时不会发生问题。
getline()中读入结束的回车后,结束符不放入缓存区,会将读入的\n直接去除,
下一个输入前,缓冲区为空,并不会因为回车留下\n。

而cin的结束后,以及getchar()此类的读入结束后,按下回车或者使用空格读入下一个,
此时按下的回车或空格会还在缓存区,继续用getline()就会出现前面所提到的情况。

int main()
{
    string str;
    getline(cin,str);
    char s;
    cin>>s;
    int count=0;
    for(int i=0;i<str.size();i++){
        if(str[i]==s||str[i]+32==s||str[i]-32==s)
        {
            count++;
        }
    }
    cout<<count<<endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值