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

posted @ 2021-10-20 19:56  new-code  阅读(226)  评论(0)    收藏  举报