2020年7月28日 周二 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】
本文目录
1. 简单介绍输入缓冲区
程序的输入都建有一个缓冲区,即输入缓冲区。每次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入。
举个栗子:
void input_test()
{
string str;
cout<<"cin的缓冲区测试:"<<endl;
cin>>str;
cout<<str<<endl;
cin>>str;
cout<<str<<endl;
}
由于cin在遇到空格时就会停止输入,所以如果在第一次输入时,利用空格隔开两个字符串,那么cin在第一次取的时候,只会读取前一个字符串,到空格结束,此时缓冲区还保留着前面输入的第二个字符串,因此第二次cin就会直接从缓冲区取残留数据,而不会请求输入。
如果要解决这个问题,可以在第二次调用 cin>>str 之前通过cin.sync()来清空输入缓冲区,代码如下:
void input_test()
{
string str;
cout<<"cin的缓冲区测试:"<<endl;
cin>>str;
cin.sync();
cout<<str<<endl;
cin>>str;
cout<<str<<endl<