为了账号安全,请及时绑定邮箱和手机立即绑定

为什么getline输入时,我要敲两次回车才行????


#include<iostream>
#include<string>
using namespace std;
int main()
{
    string name;
    cout<<"Input your name: ";
    getline(cin, name);

    if(name.empty())
    {
        cout<<"input is null...."<<endl;
        return 0;
    }
    if(name == "imooc")
    {
        cout<<"you are a administrator"<<endl;
    }    
    cout<<"hello "<<name<<endl;
    cout<<"name's length: "<<name.size()<<endl;
    cout<<"首字母: "<<name[0]<<endl;
    return 0;
}

正在回答

2 回答

谢谢啊

0 回复 有任何疑惑可以回复我~

这事因为getline函数决定的,getlime函数其实有3个参数的,istream& getline ( istream &is , string &str , char delim ); 第三个是默认缺省为'\n',也就是说,换行。getlime将'\n'前面的字符写入str字符串,也就是name中,当然会去掉'\n',你用的应该是VC6.0才会出现这样的问题吧,vs已经不会有这问题了。

VC6.0避免按两次回车的办法:(网上找到的)


解决方法:进入X:\Program Files\Microsoft Visual Studio\VC98\Include目录(VC6.0安装的地方),用记事本打开string(注意,不是string.h),然后找到以下代码段. 

else if (_Tr::eq((_E)_C,_D)) 

{_Chg = true; 

_I.rdbuf()->snextc(); // 把这一行注释掉,也可删掉 

_I.rdbuf()->sbumpc(); //添加这一行,这行本来没有 

break; 

}


现状:微软已经确认这是他们产品中的'臭虫'(bug),这个bug已经在Microsoft Visual C++ .NET得到修正.


2 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之封装篇(上)
  • 参与学习       103381    人
  • 解答问题       732    个

封装--面向对象的基石,本教程力求帮助小伙伴们即学即会

进入课程

为什么getline输入时,我要敲两次回车才行????

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号