cin.ignore()函数的使用

ignore函数
功能:函数用于输入流。它读入字符,直到已经读了num 个字符(默认为1)或是直到字符delim 被读入(默认为EOF).  
其调用形式为cin.ignore(n,终止字符)
原型:istream &ignore( streamsize num=1, int delim=EOF );
函数作用是跳过输入流中n个字符,或在遇到指定的终止字符时提前结束(此时跳过包括终止字符在内的若干字符)。

可以简单的这样理解cin.ignore(a,ch)方法是从输入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用。每抛弃一个字符,它都要计数和比较字符:如果计数值达到a或者被抛弃的字符是ch,则cin.ignore()函数执行终止;否则,它继续等待。它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。比如可以这么用:cin.ignore(1024,'n'),通常把第一个参数设置得足够大,这样实际上总是只有第二个参数'n'起作用,所以这一句就是把回车(包括回车)之前的所以字符从输入缓冲(流)中清除出去。


#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那么此时流里面剩的是bcdn,此时cin.ignore();吃掉的就是b了,这是流里还剩下cdn直接交给cin.getline(str3,30);应为有个n所以这里getline就直接返回 .


in.ignore(numeric_limits<std::streamsize>::max(),’\n’);//清除当前行
cin.ignore(numeric_limits<std::streamsize>::max()); //清除cin里所有内容
可能会有很多人在做循环中的选择时会发现:如果输入的不是数字而是字符会产生无限循环
例如:
int choice=0;
 
while(choice!=4)
{
         switch(choice)
         {
                   case 1:         break;
                   .................
                   default:   cout<<"wrong"<<endl;
          }
         cin>>choice;
}
当输入的 choice是字符时,就会产生无限循环
这是因为:读入一个字符到键盘缓冲区,比对,发现不是数字,字符会滞留在缓冲区,
下次又会去读,发现又是字符,如此无限循环下去。
可以纯粹的用清空键盘缓冲区的方法去解决,但是有些编译器会不支持 fflush(),所以有个更好的方法(调用:in.ignore(numeric_limits<std::streamsize>::max(),’\n’);//清除当前行
cin.ignore(numeric_limits<std::streamsize>::max()); //清除cin里所有内容

你可能感兴趣的:(ignore函数,消除上次输入的影响)