问题
一般输入带空格的string时,如果该输入是第一次输入,用以下方法即可。
string s;
getline(cin , s);
但是当该段代码前面还有输入时,如:
string t , s;
cin>>t;
getline(cin , s);
就无法正常读入。
原因
当缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin会将其忽略并清除,但当getline()读取数据时,不会像cin>>那样忽略第一个换行符,反而会直接读取,将换行符替换为空字符’,导致后续无法输入。
解决方法
清空缓冲区
cin.ignore();
即:
string t , s;
cin>>t;
cin.ignore();
getline(cin , s);