cin.ignore 是从输入流(cin)中提取一定数目的字符并把提取的字符忽略(ignore)
使用如:
cin.ignore(num,ch) //从输入流cin中提取num个字符,遇到ch则停止
cin.ignore(num) //直接从输入流提取num个字符,输入的字符数量要大于num
从上面用法可以看出, cin.ignore每忽略一个字符,都要计数和比较字符 cin.ignore常用功能:清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。
例如:
cin.ignore(1024,'\n'); //把第一个参数设置足够大,在这个范围内读取到 回车 后,把回车前面输入流的字符连同回车一同清除
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n') ;//直接清空输入流(C++)
这里简单提一下cin.ignore()函数用法及cin.getline()组合的用法
#include<iostream>
using namespace std;
int mian(){
char buf[20];//20个空间输入19个字符,需要留下一个存放'\0',否则自动替换"
cin.ignore(7);//忽略前七个字符 \n"
cin.getline(buf,10);//将10个字符提取到buf中,因为第十位需要存放'\ 0',所以实际提取10位,能显示的是九位 \n"
cout<<buf<<endl;
return 0;
}
接下来展示cin.ignore的一些使用示例
#include <iostream>
using namespace std;
void main()
{
int a,b,c;
cout<<"input a:";
cin>>a;
cin.ignore(1024, '\n');
cout<<"input b:";
cin>>b;
cin.ignore(1024, '\n');
cout<<"input c:";
cin>>c;
cout<<a<<"\t"<<b<<"\t"<<c<<endl;//如果没有cin.ignore(),可以一次输入3个数,用空格隔开,但是不美观
}
如果cin.ignore()不给参数,则默认参数为cin.ignore(1,EOF),即把EOF前的1个字符清掉,没有遇到EOF就清掉一个字符然后结束,会导致不正确的结果,因为EOF是文件结束标识。
#include<iostream>
using namespace std;
void main()
{
char str1[30],str2[30],str3[30];
cout << "请输入你的姓名:";
cin>>str1;
cout<<"请输入你的住址:";
cin.ignore();
cin.getline(str2,30,'a');
cout << "请输入你的籍贯:";
cin.ignore();
cin.getline(str3,30);
cout<<str3; //如果在地址那里输入bcdabcd那么此时流里面剩的是bcd\n,此时cin.ignore();吃掉的就是b了,这是流里还剩下cd\n直接交给cin.getline(str3,30);应为有个\n所以这里getline就直接返回 .
}
cin.getline用法:
#include <iostream>
int main()
{
std::string str;
std::cout<<"随便输入什么"<<endl;
std::getline(std::cin,str);
std::cout<<str;
return 0;
}