@[TOC]C++ ignore()函数的使用----Linghu6p
C++ cin.ignore()函数 用法
才开始学c++,看到文件流的时候看到了ignore()这个函数,搜了很多,结合自己的理解写一下吧,希望能给刚学c++的伙伴一个帮助嗷。话不多说,看例子.
首先,得理解 cin
这个函数输入取数据的过程
// cin如何读取
int a, b;
cin >> a >> b;
大家肯定知道,假定我们在这里输入3 5 8 9 11
,a最终会读取的数字是 3
。但是实际上cin
是将3 5 8 9 11
都放入了缓冲区,等待a
去读取,a
从头开始读,读到int
类型的数据,并将3
拿出来赋给a
,这时候缓冲区内还剩下:5 8 9 11
。注意:这里3
后面的' '
是存在的,缓冲区内的字符会一直留着直到后面被读取。然后接着b再读取,读到的是数字5
,然后5便赋给b
,剩下的字符留在缓冲区等待程序后续操作。
差不多到这里,我们接着来看ignore()的用法吧!嗯…先看他的函数原型。
istream& ignore (streamsize n = 1, int delim = EOF);
这是什么意思呢?其实很简单,前面提到的缓冲区就和他有关,举个例子。
ignore(6,’\n’)
这里的意思是说从缓冲区的第一个字符开始读,读到第``个字符,这些字符我们就全部从缓冲区里舍去,假如这段字符长这样hello c++
,那么现在缓冲区里还剩下c++
,这里的字符是一个一个来的,假如是数字,例如:13 1 89 72
,调用了cin.ignore(6,'\n')
之后呢,缓冲区里还剩下9 72
,没错,89变成了9,就是因为舍去的是前六位字符而不是数字,所以这里也是很多人容易错的地方,觉得是舍弃6个整数。
接着,看'\n'
,这个的意思就简单了,只要你输入了'\n'
,也就是我们键入回车的时候,ignore()便不再从缓冲区里舍弃字符了,也就是你回车之前的所有字符全部从缓冲区里拿出来。这个'\n'
也可以定义为其他字符,只要遇到这个字符ignore()
便停止他的行为。
上代码!
//ignore()用法
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a;
//从缓冲区舍弃字符,到第五个停止,如果遇到换行符,舍弃换行符之前的所有字符
cin.ignore(5, '\n');
cin >> b;
cout << "a is : " << a << endl;
cout << "b is : " << b << endl;
return 0;
}
看输出实例。输入25 86 91 12
,首先25
被a
从缓冲区中拿出来,此时缓冲区剩下'' '86 91 12
,特意把' '
写出来方便读者观看。然后开始舍弃,数到第五位,也就是91
中9
的位置,9
和它之前的数据被全部舍弃,b再进去读取,便读取到1
,输出正确。
再来,换了输入样例。这里我们在数字8后键入了回车,按照前面所说,a
拿走了25
,回车将8
以及它之前的数据全部丢掉,再给b进去读取,因此直接读取96
最后的最后,我们来看cin.ignore(),大可以把cin.ignore()理解为cin.igre(1,'\n')
,就是舍弃掉第一个字符或者回车之前的数据,我们可以用它舍弃掉缓冲区里的空格字符或者存在的换行符。直接看码子吧 hhhhh
// 代码差不多
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a;
cin.ignore(); //唯一的区别在这!
cin >> b;
cout << "a is : " << a << endl;
cout << "b is : " << b << endl;
return 0;
}
这里呢,就是很简单的按序输出,用了cin.ignore(),你可以理解为你要的数据就按照你输入进去的数据一一给变量赋值并打印。
第一次写,有错希望指正啦!