以前刷一道算法题用getline()函数的时候用了cin.ignore()就可以通过,没用这个函数就不能通过,最近也是又一次用到getline()想起了这个函数就测试了一下,同时也很好奇它的用法到底是怎么样的,上网去看了一下别人的博客,感觉不那么好懂,不过依样画葫芦我自己拿了一些数据来测试,基本上算是明白了,下面就解释一下这个函数:
cin.ignore()函数中有两个参数,即原型是cin.ignore(a,b),a是一个数值,b是一个字符,例如说cin.ignore(7,’a’)。就拿这个例子来说,它表示从输入流cin中提取字符,提取的字符抛弃,每抛弃一个字符,计数加1同时比较字符:如果计数值达到7或者被抛弃的字符是a,则cin.ignore()函数执行终止,那么下面用一个实际例子来解释:
代码如下:

#include<iostream>
#include<string>
using namespace std;
int main()
{string line;cin.ignore(7,'a');cin>>line;cout<<line<<endl;return 0;
}

第一组测试数据:

dsfdagfdgcd

a是该字符串的第5个字符,5<7,那么在读到a这个字符的时候这个函数终止,输出后面的所有字符,即输出为:

gfdgcd

第二组测试数据:

dhfdgfghsadfgdfgcd

此时a是该字符串的第10个字符,10>7,那么在读完7个字符之后这7个字符都没有一个是a,函数终止,从第8个字符开始输出后面所有字符,即输出为:

hsadfgdfgcd

如果不给这个函数给定参数,它的默认参数为cin.ignore(1, EOF),那么相信看过上面的内容是知道这个参数是什么意思的,其就是表示:要么读完一个字符或者读到换行符结束。
上面的内容看完肯定是明白了不少的,那么我遇到的一个问题也放在下面解释一下,应该是很好理解了,代码如下:

#include<iostream>
#include<string>
using namespace std;
int main()
{string line;cin.ignore();while(getline(cin,line))cout<<line<<endl;return 0;
}

输入如下:

I love everybody
Iloveeverybody
I love everybody

输出如下:

 love everybody
Iloveeverybody
I love everybody

第一行的第一个字符就被抛弃了,从空格开始其他都没有发生变化。那么我们将cin.ignore()函数放到循环中看一下会出现什么情况,代码如下:

#include<iostream>
#include<string>
using namespace std;
int main()
{string line;for(int i=3;i>0;i--){cin.ignore();getline(cin,line);cout<<line<<endl;}return 0;
}

输入还是一样,输出如下:

 love everybody
loveeverybodylove everybody

那么接下来这个代码可以自己拿去试一下,然后自己分析一下,当然前面讲的个人感觉这个函数还是讲清楚了,要是下面这个代码能看懂输出为什么是这样,应该是理解得很明白了,代码如下:

#include<iostream>
#include<string>
using namespace std;
int main()
{string line;while(getline(cin,line)){cin.ignore();cout<<line<<endl;}return 0;
}

两个代码一起看看应该就没什么大问题了:

#include<iostream>
#include<string>
using namespace std;
int main()
{string line;cin.ignore();while(getline(cin,line)){cin.ignore();cout<<line<<endl;}return 0;
}

输入和上个代码一样,用自己的编译器测试一下你就会明白很多,这里我要是把运行结果拿上来看是很麻烦的,但是自己测试一下就明白了,切记:一行一行的输入,不要直接复制粘贴三行输入,否则你反而有可能搞晕。

cin.ignore()用法相关推荐

  1. C++ cin.ignore()用法

    cin.ignore(int a,char b); a为一行中最大读取字符长度,b为某一个字符.在缓冲区中寻找b,找到后忽略b以前的所有字符(包括b).如果在a的范围内还没有找到b,则忽略b以前的所有 ...

  2. cin.ignore()的用法

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

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

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

  4. 02头文件的冲突导致,清除缓冲区失败之cin.ignore() 问题

    输入任意多个整数, 把这些数据保存到文件data.txt中. 如果在输入的过程中, 输入错误, 则提示用户重新输入. 指导用户输入结束(按ctrl + z) [每行最多保存4个整数] 可能遇到的 ci ...

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

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

  6. cin.ignore在Vs2019中报错提示应输入表示符的解决方案

    在vs2019中使用cin.ignore(std::numeric_limits::max(), '\n'); 编译器提示 max() 应输入标识符 修改成: cin.ignore((std::num ...

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

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

  8. C++ cin.sync()和cin.ignore()

    cin.sync()的功能是清空缓冲区,而cin.ignore()虽然也是删除缓冲区中数据的作用,但其对缓冲区中的删除数据控制的较精确. 有时候你只想取缓冲区的一部分,而舍弃另一部分,这是就可以使用c ...

  9. C++输入与输出—cout和cin的用法

    C++输入与输出-cout和cin的用法 目录(?)[-] 一输入流与输出流的基本操作 二在输入流与输出流中使用控制符 输入和输出并不是C++语言中的正式组成成分。C和C++本身都没有为输入和输出提供 ...

最新文章

  1. PSS:更简单有效的End-to-End检测
  2. Windows 8 动手实验系列教程 实验8:Windows应用商店API
  3. python判断素数的函数_Python素数prime函数练习_Python源码实操
  4. ASP.NET MVC WebAPI 资源整理
  5. 为什么 if else 不是好代码?
  6. 104. 二叉树的最大深度 golang
  7. ASP.NET Core 网站发布到Linux服务器
  8. 将z-blog改成英文blog所遇到的问题
  9. 学习面试题Day09
  10. 电动汽车动力系统整车仿真,具有双向DCDC变换器实现能量反馈,可带异步电机
  11. 北斗芯片是如何决定着北斗产业的未来?
  12. 56-狂拍灰太狼游戏
  13. linux中如何复制文件并重命名_在 Linux 上复制和重命名文件
  14. c语言求利用麦克劳林公式求sinx值,用泰勒公式求sin(x)的近似值
  15. 计算机excel数据标签,excel散点图数据标签,Excel如何设置散点图标签
  16. 方舟生存进化怎么自建服务器?方舟生存进化自建服务器教程
  17. 【手写简易版 vue3】究极长文详细讲解如何实现一个简易版 vue3
  18. 干货分享 | FMEA何时做?谁来做?
  19. sendfile:Linux中的零拷贝
  20. 【笔记】Java - mapstruct 转换VO、DTO、PO

热门文章

  1. DIV+CSS基础教程:导航条的制作详解
  2. 2016 UESTC Training for Data Structures F - 郭大侠与“有何贵干?” CDOJ 1335 线段树 扫描线 离散化
  3. 【无标题】Linux服务器上监控网络带宽的18个常用命令
  4. 常用品牌电脑的型号特点
  5. 接口传输带格式的文字和图片_HDMI高清信号传输特点
  6. 电路设计常用软件介绍
  7. 小软件推荐 - PPT遥控器
  8. 【正点原子FPGA连载】第四十四章MT9V034摄像头HDMI显示实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
  9. 无线网性能该如何测试
  10. FreeType使用