如题,在做某道 需要先输入cin>>n,后输出getline(cin,s);发现无法获取s的长度,百思不得其解,后发现是getline根本没读到。
原因:
cin只是在缓存区中,把字符读走,会剩余'/n'在缓存区中,但是getline对'/n'极其敏感,导致getline()刚开始读入便遇到/n于是停止读入数据。
原理:
cin:流提取运算符根据它后面的变量类型读取数据,从非空白符号开始,遇到Enter、Space、Tab键时结束。
getline():从istream中读取一行数据,当遇到“\n”时结束返回。
解决方法:
手动清除换行符:在cin>>后加上 cin.ignore();
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
int n;
cin >> n;
cin.ignore();//若不手动清除,则getline无法读取
getline(cin,s);
cout << n;
cout << s;
}
参考博客原址:(31条消息) C++中getline()和cin()同时使用时的注意事项_撑一把纸伞.的博客-CSDN博客