一个很麻烦的小问题,找了许久的答案~~~激动ing~~

int main()
{
    string str;
    std::cout<<"Please input your name:\n";
    getline(cin,str);
    std::cout<<"Hello,"<<str<<"!!\n";

    return 0;
}

 

执行后会出现需要两次输入回车才能将str中的内容输出。

原因分析:这是微软的STL的一个bug, 它在读stream 的时候,总要试图预读一个char 来判断是否eof。对文件操作没问题,对键盘输入,就会出现打两次回车的问题。

解决办法:

1、找到VC++安装目录 \\Program Files\Microsoft Visual Studio\VC98\Include\   在该目录下找到string 文件,不是string.h 文件。用VC++打开。

2、修改文件中的以下部分:

else if (_Tr::eq((_E)_C, _D))
                {_Chg = true;
            
// _I.rdbuf()->snextc(); /* 把这一行注释掉,添加下一行.*/
               
_I.rdbuf()->sbumpc(); //添加该行或用该行替换上行。
                break; }

3、保存文件,问题解决。