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 语句,但只获取了数字。当我们按下 Enter 键时,它跳过了 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
广告