C++ cin.ignore()的用途是什么
cin.ignore() 函数用于忽略或清除输入缓冲区中的一个或多个字符。
为了理解 ignore() 的工作原理,我们需要看一个问题,并通过使用 ignore() 函数来解决它。问题如下。
有时候我们需要清除不需要的缓冲区,这样当输入下一个值时,它将会存储到所需的容器中,而不是在上一个变量的缓冲区中。例如,在进入 cin语句 后,我们需要输入一个字符数组或字符串。因此,我们需要清除输入缓冲区,否则它将占用上一个变量的缓冲区。通过在第一个输入后按下”Enter”键,由于上一个变量的缓冲区有空间来存储新数据,程序会跳过接下来的容器输入。
示例
#include<iostream>
#include<vector>
using namespace std;
main() {
int x;
char str[80];
cout << "Enter a number and a string:\n";
cin >> x;
cin.getline(str,80); //take a string
cout << "You have entered:\n";
cout << x << endl;
cout << str << endl;
}
输出
Enter a number and a string:
8
You have entered:
8
有两个cin语句用于整数和字符串,但只有数字被接受。当我们按下回车键时,它会跳过getline()函数,而不接受任何输入。有时它可以接受输入,但是在整数变量的缓冲区内,所以我们看不到字符串作为输出。
现在为了解决这个问题,我们将使用cin.ignore()函数。这个函数用于忽略给定范围内的输入。如果我们像这样编写语句-
cin.ignore(numeric_limits::max(), ‘\n’)
然后它也忽略包括换行符在内的输入。
示例
#include<iostream>
#include<ios> //used to get stream size
#include<limits> //used to get numeric limits
using namespace std;
main() {
int x;
char str[80];
cout << "Enter a number and a string:\n";
cin >> x;
cin.ignore(numeric_limits<streamsize>::max(), '\n'); //clear buffer before taking new
line
cin.getline(str,80); //take a string
cout << "You have entered:\n";
cout << x << endl;
cout << str << endl;
}
输出
Enter a number and a string:
4
Hello World
You have entered:
4
Hello World