请教c++里string与getline(cin,string)的有关内容.

来源:百度知道 编辑:UC知道 时间:2024/05/15 10:01:18
这是我自己写的函数的一部分:
cout<<"please input a string."<<endl;
string s1;
getline(cin,s1);
cout<<"please input anther one."<<endl;
string s2;
getline(cin,s2);
string s3=s1+s2;
cout<<s3<<endl;

但是为什么输出的s3不是预想的s1后面接上s2,而只是s1???
而且还有一个奇怪的现象:在getline(cin,s1);的时候,输入s1后摁两下回车,程序才会往下运行(这是正常的,我明白是怎么回事),但是在getline(cin,s2);的时候却只摁一下回车就行了。我觉得就是在这里出了问题,不过不知道如何改正。

我最近也遇到了这个问题(老师布置的作业要求用VC++6.0完成,郁闷!平时我一般用VS2008),费了一番周折才弄明白,看到几年前的提问,我就发一下自己的看法,算作复习吧~
“在getline(cin,s1);的时候,输入s1后摁两下回车,程序才会往下运行(这是正常的,我明白是怎么回事),” 这句话是不对的,这种情况是VC++6.0的一个bug。
就你的程序而言,在VC6.0中,输入s1后,按回车两次,第一个回车是第一个getline函数的截止符,但读取后被抛弃,s1被正确赋值,
按第二个回车后(此回车符在缓冲区中),输出提示"please input anther one.",然后输入s2,但是此时缓冲区中第一个字符就是回车,第二个getline函数读到的此回车符,然后s2就被置为空串(原来也是空串)。这样,后面输入的内容就继续停留在了缓冲区里,并没有赋给s2.然后s3就等于s1连接上一个空串,自然还和s1相同。
我不知道2007年哪个版本的VC是最新的,但是VC++6.0bug之多,着实害人不浅。VS2008 2010已经没了这个问题,我猜测VS2005应该也修正了此问题。抛弃VC++6.0吧,我们得跟着标准走。

getline()输入的是char型的数据,自然不会输出想要的结果,可以加上cin.clear();函数来清空getling()函数
按两下回车是因为没有结束标志的原因

getline()括号中是要求有结束标志的

你在程序里加上这一句:
#include<string> 或者 #include<string.h>
应该就可以了,已在Dev-C++ 4.9.9.2下测试通过。

getline()输入的是char型的数据,自然不会输出你想要的结果,可以加上cin.clear();函数来清空getling()函数
-------------可能是这样。仅供参考
你按两下回车是因为没有结束标志的原因
getline()括号中是要求有结束标志的,

你的string s3=s1+s2;
中的+是没有问题的吧?