istream& getline (istream& is, string& str, char delim);
istream& getline (istream& is, string& str);
这两个getline读取cin流里的字符串到str中,直到遇到下列情况结束,并返回:
- 遇到文件结束符,如windows下模拟的ctrl+z,或无效输入
- 遇到换行符,即Enter,将换行符留在缓冲区中,留给下一个输入,并不存入str中,所以输出str,要自己添加endl来换行
- 遇到设备故障
如果第一个字符为换行符,getline也将结束,则str被置为空串。getline函数返回istream引用的对象,和cin一样也可以用作condition(条件,即有真假的表达式)。
getline(cin,str)的读取原理是将以‘/n’为结束符做为一完整读取的一行,’/n’会读。所以当之前用cin读取一个字符的时候,你会输入一个字符然后点击回车,那么下面getline(cin,str)读的时候会读入这个回车,并判断结束了。
解决的方法是在getline前面加入cin.ignore().这个就会忽略那个回车。
int main()
{
string str;
int a;
cin>>a;
getline(cin,str);
cout<<endl;
return 0;
}