今天在hackerrank刷题的时候发现已给代码中有这样的一行:

cin.ignore(numeric_limits<streamsize>::max(), '\n');

不解其意,在搜索相关的答案后发现,原来这是清空输入流的意思,可能是OJ在输入数据过程中,为了能够在每次输入数据时,使前面的数据不被后面的数据影响所特意写的。

一开始我猜测是控制输入的位数的,然后用下面这段代码测试:

#include <iostream>
#include <limits>
using namespace std;
int main()
{
	int n;
	cin>>n;
	cin.ignore(numeric_limits<streamsize>::max(), '\n');
	cout << n <<endl;
	return 0;
}

(在用这个代码测试后发现,输入流超过10位数字时,就会出下错误,返回结果2147483647,原来是超过C语言中int的范围了,2147483647是int的最大取值。)

cin.ignore()函数是从输入流中提取一定数目的字符,如:

cin.ignore(num,ch) //从输入流cin中提取num个字符,遇到ch则停止
cin.ignore(num)  //直接从输入流提取num个字符,输入的字符数量要大于num

cin.ignore()每忽略一个字符都要计数和比较字符,所以常用它来清除以“\n”,EOF结束的输入缓冲区内容,消除上一次输入对下一次输入的影响。如:

cin.ignore(1024,'\n'); //把第一个参数设置足够大,在这个范围内读取到 回车 后,把回车前面输入流的字符连同回车一同清除
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n') ;//直接清空输入流(C++)