更多资源请关注纽扣编程微信公众号
cin.sync()清除缓存区
如果需要输入如下内容
3
This is C++ language.
This is JAVA language.
This is Python language.
写如下程序
#include<bits/stdc++.h>
using namespace std;
string str[100];
int main(){int n;cin>>n;for(int i=0;i<n;i++){getline(cin,str[i]);cout<<str[i]<<endl;}
}
输出如下结果:
发现最后一行This is Python language. 没有被getline函数输入。
原因是:
cin>>n
原因是cin>>的结束符,回车,或者空格都可以,但是当cin读取结束后,cin的结束符还会再缓冲区中存在,并让下次需要读取时进行读取
getline是从缓冲区读取一条,因此第一次循环getline是读取cin换行的缓存区数据
解决方法:
1.在cin后面加入cin.sync()清空缓冲区,getline开始读取
2.在cin后面getline把缓存区数据取出
cin与getline()的区别
cin的结束符,结束后,结束符还在缓存区,scanf同cin
getline()中的结束符,结束后,结束符不放入缓存区