第1章 C++技巧:输入缓冲区清除方法
来源:互联网 发布:m1213nf扫描软件 编辑:程序博客网 时间:2024/06/06 09:46
通常大家会用sync()函数来清除输入缓冲区的内容。个人感觉还是用ignore更好。
先简单说下sync(),sync()的作用就是清除输入缓冲区。成功时返回0,失败时badbit会置位,函数返回-1.
另外,对于绑定了输出的输入流,调用sync(),还会刷新输出缓冲区。
但由于程序运行时并不总是知道外部输入的进度,很难控制是不是全部清除输入缓冲区的内容。通常我们有可能只是希望放弃输入缓冲区中的一部分,而不是全部。比如清除掉当前行、或者清除掉行尾的换行符等等。但要是缓冲区中已经有了下一行的内容,这部分可能是我们想保留的。这个时候最好不要用sync()。可以考虑用ignore函数代替。
cin.ignore(numeric_limits<std::streamsize>::max(),’\n’);//清除当前行
cin.ignore(numeric_limits<std::streamsize>::max()); //清除cin里所有内容
不要被长长的名字吓倒,numeric_limits<std::streamsize>::max()不过是climits头文件定义的流使用的最大值,你也可以用一个足够大的整数代替它。
使用ignore显然能比sync()更精确控制缓冲区。
还有ignore()这样用,可以清除一个字符。不过这个用的不多,对于清楚知道要弃置一个字符的情况,完全可以由程序做一次读操作,然后放弃读入内容来实现。
先简单说下sync(),sync()的作用就是清除输入缓冲区。成功时返回0,失败时badbit会置位,函数返回-1.
另外,对于绑定了输出的输入流,调用sync(),还会刷新输出缓冲区。
但由于程序运行时并不总是知道外部输入的进度,很难控制是不是全部清除输入缓冲区的内容。通常我们有可能只是希望放弃输入缓冲区中的一部分,而不是全部。比如清除掉当前行、或者清除掉行尾的换行符等等。但要是缓冲区中已经有了下一行的内容,这部分可能是我们想保留的。这个时候最好不要用sync()。可以考虑用ignore函数代替。
cin.ignore(numeric_limits<std::streamsize>::max(),’\n’);//清除当前行
cin.ignore(numeric_limits<std::streamsize>::max()); //清除cin里所有内容
不要被长长的名字吓倒,numeric_limits<std::streamsize>::max()不过是climits头文件定义的流使用的最大值,你也可以用一个足够大的整数代替它。
使用ignore显然能比sync()更精确控制缓冲区。
还有ignore()这样用,可以清除一个字符。不过这个用的不多,对于清楚知道要弃置一个字符的情况,完全可以由程序做一次读操作,然后放弃读入内容来实现。
- 第1章 C++技巧:输入缓冲区清除方法
- C语言清除输入缓冲区
- 在C / C ++中清除输入缓冲区
- 输入缓冲区清除
- 清除输入缓冲区
- scanf()中清除输入缓冲区的几种方法归纳
- c清除缓冲区数据
- 输入缓冲区的清除问题
- Linux C编程 使用scanf时清除键盘缓冲区 -- 清除输入缓存
- Linux C编程 使用scanf时清除键盘缓冲区 -- 清除输入缓存
- Linux C编程 使用scanf时清除键盘缓冲区 -- 清除输入缓存
- C语言清除输入缓存方法记录
- scanf清除缓冲区的方法
- fflush(stdin) 清除Scanf输入缓冲区
- C语言 清空输入缓冲区的方法
- C语言清除缓冲区的函数
- C 语言中清空输入缓冲区
- C语言-关于输入缓冲区
- 关于J-LINK程序下载出现的问题
- 在iphone/ipad 上预览阅读服务器端的 PDF not UIDocumentInteractionController
- DTD学习一(入门)
- Struts乱码的解决办法
- GDAL资料编译和使用
- 第1章 C++技巧:输入缓冲区清除方法
- Windows游戏编程大师技巧第二版学习笔记之第一章 实验补充
- what have you tried?
- C语言中的字符串,也叫c串
- 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数。
- Java连接池
- ui 自定义的度如何把握
- 单元测试应该测什么?
- 关于smartanalyst的项目设想