cin-getline缓存区
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()中的结束符,结束后,结束符不放入缓存区
https://blog.csdn.net/qq_37131497/article/details/82629440
作者:newcode 更多资源请关注纽扣编程微信公众号

从事机器人比赛、机器人等级考试、少儿scratch编程、信息学奥赛等研究学习

浙公网安备 33010602011771号