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里所有内容

cin.ignore()函数的使用相关推荐

  1. 一眼就能看懂的cin.ignore()函数详解

    看了很多网上的cin.ignore()函数的解析,发现万片一律,不知道是你抄我的还是我抄你的,还都没有注明转载,而且纯粹是教科书的死搬硬套. 希望我的这篇博客可以帮到大家. 首先,他的函数原型是这样的 ...

  2. c++ 中的 cin.get()函数

    cin.get作用:从标准输入吸收任何字符(包括回车和空格),优先吸收cin缓存(之前cin的残留内容). #include <iostream> #include <sstream ...

  3. c++ 标准库中 cin.ignore()

    cin.ignore()函数是C++标准输入流(cin)中的一个方法.cin.ignore()函数中有两个参数,分别为数值型的a 和 字符型的 ch ,即cin.ignore( a, ch ).它表示 ...

  4. c++——ignore()函数

    cin.ignore()函数是C++标准输入流(cin)中的一个方法.cin.ignore()函数中有两个参数,分别为数值型的a 和 字符型的 ch ,即cin.ignore( a, ch ).它表示 ...

  5. cin.ignore()用法

    以前刷一道算法题用getline()函数的时候用了cin.ignore()就可以通过,没用这个函数就不能通过,最近也是又一次用到getline()想起了这个函数就测试了一下,同时也很好奇它的用法到底是 ...

  6. cin.ignore()的用法

    cin.ignore()函数是C++标准输入流(cin)中的一个方法.cin.ignore()函数中有两个参数,分别为数值型的a 和 字符型的 ch ,即cin.ignore( a, ch ).它表示 ...

  7. cin.clear、cin.sync()与cin.ignore()

    一.cin.clear().cin.sync() cin.clear()是用来更改cin的状态标示符的. cin.sync()是用来清除缓存区的数据流的. 如果标示符没有改变那么即使清除了数据流也无法 ...

  8. cin输入问题的处理:cin.clear() 、cin.sync() 、cin.ignore()

    1.cin.clear():清除cin流的错误状态,将错误标识改为默认0 2.cin.sync():清除缓冲区的数据 3.cin.ignore(): 其原型为: istream & ignor ...

  9. 一文读懂C++中的cin.ignore()

    cin.ignore(int intExp, char chExp); 1.作用: 从缓冲区舍弃前intExp个字符(char):如果在舍弃的过程中遇到了chExp,就舍弃掉chExp,然后退出. 也 ...

最新文章

  1. 手表可测血压,耳机支持颈椎保护……这届电子设备越来越“养生”了
  2. T-SQL and XML
  3. 管理Win2003sp1防火墙的一点小技巧
  4. ConcurrentHashMap深入分析
  5. facebook有哪些信息_关于Facebook表情表情符号的所有信息
  6. python怎么安装bokeh_python怎么安装bokeh
  7. 手写springboot_Spring Boot 入门教程 | 图文讲解
  8. 面向搜索引擎的内容管理系统(CMS)设计
  9. visual studio内存溢出检测工具_详解JVM内存管理与垃圾回收机制2 何为垃圾
  10. Ubuntu18.04修改主机名和用户名
  11. shiro实战系列(十一)之Caching
  12. HTTP 500 - 内部服务器错误的解决
  13. Android studio 真机调试出现sdk版本不匹配问题
  14. C# WPF 高级教程
  15. 广数系统加工中心编程_CNC加工中心编程加工的一些小技巧,学会必有用
  16. 【R语言-P值校正(BH)】
  17. android按键定义
  18. 行逻辑链接的顺序表(压缩存储稀疏矩阵)详解
  19. arcgis lisence manager 无法启动
  20. j计算机屏幕关闭时间,win7如何设置自动关闭电脑屏幕的时间?

热门文章

  1. L3-002. 堆栈-PAT团体程序设计天梯赛GPLT(树状数组)
  2. L2-002. 链表去重-PAT团体程序设计天梯赛GPLT
  3. python 3d重建_三维人脸重建(一)——Python读取obj文件
  4. Oracle修改实例名SID
  5. weblogic 解决线程阻塞
  6. IntelliJ 通过 Cloud Toolkit 登陆远程服务器终端 Terminal
  7. SpringCloud微服务实战(一)-简介
  8. dhcp网络服务的搭建和配置
  9. Centos-redis安装配置
  10. 异构服务器的负载均衡及过载保护