getline读取不等待输入的问题
先cin >>,然后getline读取时会发生一闪而过不等待输入的情况,用fflush(stdin)清除输入缓冲区也是如此,纠结半天终于在妹神指导下搞清楚
由于输入一个数据后按了回车键,而getline没有忽略换行符,直接将前面输入的数字后面的换行符当作了输入,导致没有等待输入的情况。
此时,需要在getline前面添加cin.ignore()用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。
而fflush(stdin)用来清楚输入缓存,按说和ignore()作用应该相同,但是还是没有等待输入,后来搜索得知,只有部分编译器支持此函数如vc6.0,而linux下的gcc不支持此功能,而我正用的linux下gcc。
程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时(按enter键后,如果不按enter不会输入缓存区)会将输入的数据存入输入缓冲区,而cin等函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入。此点需要注意。
cin.clear()重置错误标志位,一般用于输入出错时清空错误标志,以便进行下次输入。比如当输入一个数字
int n;
while(1){cin >> n;if(cin.fail()){cout << "invalid input" << endl;cin.clear();cin.ignore(1024);cout << "please try again!" << endl;}break;
}
此时输入了一个字符,此时会设置错误标志,检查cin.fail()是否输入正确,如果输入错误,首先要清空标志位,不然ignore时会首先判断标志位,如果有错误标志则不进行忽略操作,注意顺序。
getline读取不等待输入的问题相关推荐
- linux shell 等待输入_shell中获得用户的输入
有时我们需要shell脚本有更多的交互性,比如我们安装某个linux命令的时候,会提示[N / Y]选择安装或者放弃,这时就需要用到shell的read命令. read命令的基本使用 演示代码如下: ...
- python读取一行的函数_Python linecache.getline()读取文件中特定一行的脚本
Python linecache.getline()读取文件中特定一行的脚本 比如: Code highlighting produced by Actipro CodeHighlighter (fr ...
- getline读取多行
getline读取多行 几点说明: cin>> s 是无法读入换行和空格 当前面的cin>>w:输入数字之后,数字存储在输入缓冲区,敲回车,输入的数字因为回车的原因传给了w,但 ...
- c++ 读取数字,直到输入非数字字符为止的算法(附完整源码)
C++读取数字,直到输入非数字字符为止的算法 C++读取数字,直到输入非数字字符为止的算法完整源码(定义,实现,main函数测试) C++读取数字,直到输入非数字字符为止的算法完整源码(定义,实现,m ...
- QtCreator下使用c++标准输入cin输出cout没有阻塞等待输入
引言 在QtCreator中编写c++程序,其中需要从控制台输入,就用了c++的cout和cin,本应该等待控制台输入文本,但是却没有.下面是具体的案例. 案例 本文基于QtCreator创建的qt控 ...
- c语言:从标准输入读取几行输入,输入打印到标准输出上,加上行号
编写一个程序,从标准输入读取几行输入.每行输入都要打印到标准输出上,前面加上行号. 在编写这个程序的时候要使这个程序能够处理的输入行的长度没有限制. 解:程序: #include <stdio. ...
- 读取用户的输入,直到输入quit时退出
今天面试时碰到了一个机试题,记录一下: 读取用户的输入,直到输入quit时退出 把String类型转换为Integer类型 当输入为1时,返回true,输入不为1时返回false 不可用一个try.c ...
- 黑马毕向东Java课程笔记(day19-11——19-22)IO字节流:字节流及其读取、字节流缓冲区、自定义字节流(读取)的缓冲区、读取键盘的输入、读取/写入转换流、流操作规律
1.字节流--File 字节流的介绍 字符流:(一个字符2个字节16位) FileReader FileWriter. BufferedReader BufferedWriter字节流:(一个字节 ...
- ssh总是自动断开处理方法,等待输入超时:自动注销
ssh在一段时间不操作的情况下,会自动断开,报:"等待输入超时:自动注销".在SecureCRT的会话选项设置了反空闲,仍然没有用. echo $TMOUT 看到超时间为300秒, ...
最新文章
- Android 笔记:BroadcastReceiver
- python虚拟环境安装pyqt5_python虚拟环境安装pyqt5
- 【清北前紧急补课3】水题集锦
- 【视频】SQL Server 2008 R2 StreamInsight - 多源复杂事件处理
- hibernate查询之条件查询
- 使用Nginx搭建简单的音视频直播平台RTMP协议
- Linux shell 脚本中”21″的含义解释
- [Unity] ACT 战斗系统学习 3:ScriptableObject
- ajax配套字符串,在ajax请求中填充数据字符串
- sublime html整理阶梯,sublime text 之添加插件 并使用
- python循环的基本思想是重复_python基础-循环
- 算法精解-C语言描述 递归和尾递归 (图解+实例)
- 计算机文档加密如何解锁,bitlocker怎么解锁_bitlocker解锁方法
- 太极计算机logo,太极图:最古最美最富有涵义的标志
- Python dict字典keys()、values()和items()方法
- 火萤视频壁纸(让你的桌面丰富多彩)
- 光致变色染料的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 几大搜索引擎搜索结果页大小的比较
- android 开发框架 andbase,Android快速开发框架andbase
- limit 后注入_聊一聊 SQLMAP 在进行 sql 注入时的整个流程
热门文章
- 5分钟解析Facebook最新推荐算法
- mongodb索引--1亿条记录的查询从55.7秒到毫秒级别补充版
- spring源码分析之context:component-scan/vsannotation-config/
- Apache Hadoop YARN – NodeManager--转载
- Java Machine Learning Tools Libraries--转载
- apache kafka技术分享系列(目录索引)--转载
- Understanding Extension Class Loading--官方
- JDK动态代理实现原理--转载
- How can I exclude directories from grep -R?
- 【数据处理】python变量分箱常见手法:分类型、数值型、卡方、自定义