如何在 C++ 中清除 cin 缓冲区?

c++server side programmingprogramming

在本节中,我们将了解如何在 C++ 中清除 cin 缓冲区。在进入该讨论之前,让我们先看看 C++ 中的缓冲区是什么。

缓冲区是一个临时存储区域。所有标准 IO 设备在工作时都使用缓冲区来保存数据。在 C++ 中,流基本上也是缓冲区。当我们按下某个键时,它不会发送给程序。它们被存储在缓冲区中。它由操作系统缓冲,直到分配给程序的时间。

有时我们需要清除不需要的缓冲区,因此当进行下一次输入时,它会存储到所需的容器中,而不是前一个变量的缓冲区中。例如,在输入 cin 语句后,我们需要输入一个字符数组或字符串。所以我们需要清除输入缓冲区,否则它将占用前一个变量的缓冲区。按"Enter"键第一次输入后按下 键,由于前一个变量的缓冲区有空间容纳新数据,程序会跳过容器的后续输入。

示例

#include<iostream>
#include<vector>
using namespace std;
main() {
   int x;
   char str[80];
   cout << "输入一个数字和一个字符串:\n";
   cin >> x;
   cin.getline(str,80); //获取一个字符串
   cout << "您已输入:\n";
   cout << x << endl;
   cout << str << endl;
}

输出

输入一个数字和一个字符串:
8
您已输入:
8

有两个 cin 语句用于整数和字符串,但只接受数字。当我们按下回车键时,它会跳过 getLine() 函数而不接受任何输入。有时它可以接受输入,但在整数变量的缓冲区内,因此我们无法看到字符串作为输出。

现在要解决这个问题,我们将使用 cin.ignore() 函数。此函数用于忽略给定范围内的输入。如果我们像这样编写语句

cin.ignore(numeric_limits::max(), ‘\n’)

然后它会忽略输入,包括换行符。

示例

#include<iostream>
#include<ios> //用于获取流大小
#include<limits> //用于获取数字限制
using namespace std;
main() {
   int x;
   char str[80];
   cout << "输入一个数字和一个字符串:\n";
   cin >> x;
   cin.ignore(numeric_limits<streamsize>::max(), '\n'); //在取新行之前清除缓冲区
   cin.getline(str,80); //取一个字符串
   cout << "您已输入:\n";
   cout << x << endl;
   cout << str << endl;
}

输出

输入一个数字和一个字符串:
4
Hello World
您已输入:
4
Hello World

相关文章