Chinaunix首页 | 论坛 | 博客
  • 博客访问: 219639
  • 博文数量: 56
  • 博客积分: 2325
  • 博客等级: 大尉
  • 技术积分: 560
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-30 18:18
文章存档

2012年(7)

2011年(1)

2010年(2)

2009年(46)

我的朋友

分类: C/C++

2009-05-04 14:05:09

    sync()函数用来清除输入缓冲区的内容,感觉还是用ignore更好。
 
  先简单说下sync(),sync()的作用就是清除输入缓冲区。成功时返回0,失败时badbit会置位,函数返回-1.

  另外,对于绑定了输出的输入流,调用sync(),还会刷新输出缓冲区。

  但由于程序运行时并不总是知道外部输入的进度,很难控制是不是全部清除输入缓冲区的内容。通常我们有可能只是希望放弃输入缓冲区中的一部分,而不是全部。比如清除掉当前行、或者清除掉行尾的换行符等等。但要是缓冲区中已经有了下一行的内容,这部分可能是我们想保留的。这个时候最好不要用sync()。可以考虑用ignore函数代替。

  cin.ignore(numeric_limits::max(),’\n’);//清除当前行

  cin.ignore(numeric_limits::max()); //清除cin里所有内容

  不要被长长的名字吓倒,numeric_limits::max()不过是climits头文件定义的流使用的最大值,你也可以用一个足够大的整数代替它。

  使用ignore显然能比sync()更精确控制缓冲区。

  还有ignore()这样用,可以清除一个字符。不过这个用的不多,对于清楚知道要弃置一个字符的情况,完全可以由程序做一次读操作,然后放弃读入内容来实现.

阅读(10822) | 评论(1) | 转发(1) |
0

上一篇:C++标准库

下一篇:/dev/fd 解析

给主人留下些什么吧!~~

chinaunix网友2009-11-16 22:04:49

格式为numeric_limits::max() type可以是内部类型,如char, unsigned char, int, short, long等 注意 numeric_limits是在头文件 中定义的