关于cin的缓存区影响效果
1. 当缓冲区中有残留数据时,cin函数会直接去读取这些残留数据而不会请求键盘输入。而且,回车符也会被存入输入缓冲区中。
int num{};
while(cin>>num)
cout<<num<<endl;
这意味着两个问题:
(1)如果插入了非法字符,不能转化为int类型,那么将始终留在缓存区,阻塞正常输入。换行符‘\n’也是非法字符;
(2)如果(变量获取的元素个数)少于(键盘输入字符数),如用ch获取字符串,可以实现逐一读取输入的字符;
2. 我习惯的清空缓存去方法
cin.ignore(, '\n'); // 把回车(包括回车)之前的所以字符从输入缓冲流中清除出去
cin.get(num).get() //每次输入顺便去掉回车
3. 实例:
从键盘输入数字存入数组,直接回车可以允许为空输入(C++ Primer Plus 6.7):
#include <iostream>
#include <cctype> using namespace std; int main() {
const int DAY = ; auto *fish = new unsigned int[DAY];
char temp = {}; for (int day = ; day < DAY; day++) {
cout << "请输入第" << day+ << "天的战绩:"; cin.get(temp).get();
cout << "从缓存去读取了ASCII:" << static_cast<int>(temp) << endl; if (temp < '' and isdigit(temp)) {
fish[day] = static_cast<unsigned int>(temp - );
}
else if (temp == 'q' or temp == '\n') { continue;
}
else {
cout << "输入有误,退出系统\n";
break;
} } cout << "显示结果:\n";
for (int i = ; i < DAY; i++) {
cout << "第" << i+ << "天的战绩:" << fish[i] << "条\n";
}
}
程序说明:
程序逐一输入每一天的战绩,如果输入(1,2,3,4,5)中的一个,如果正确存入对应数组位置,直接回车或者输入‘q'跳过,输入无效字符推出程序。其中:
cin.get(temp).get()或者 在之后添加 cin.ignore(100, '\n'),都可以实现清除缓存区,清除上一次输入对后一次的影响。
关于cin的缓存区影响效果的更多相关文章
- 【MINA】缓存区ByteBuffer和IOBuffer你要了解的常用知识
mina中IOBuffer是Nio中ByteBuffer的衍生类,主要是解决Bytebuffer的两个不足 1.没有提供足够灵活的get/putXXX方法 2.它容量固定,难以写入可变长度的数据 特点 ...
- csapp lab3 bufbomb 缓存区溢出攻击 《深入理解计算机系统》
这个实验主要是熟悉栈,和了解数据缓存区溢出的问题. 数据缓存区溢出:程序每次调用函数时,会把当前的eip指针保存在栈里面,作为被调用函数返回时的程序指针.在被调用程序里面,栈是向下增长的.所有局部变量 ...
- 一个fork的面试题——fork + 缓存区
update : 20140512 题目:请问下面的程序一共输出多少个“-”? #include <stdio.h> #include <sys/types.h> #inclu ...
- Oracle关于快速缓存区应用原理
为什么oracle可以对于大量数据进行訪问时候能彰显出更加出色表现,就是通过所谓的快速缓存来实现数据的快速运算与操作.在之前的博文中我已经说过sql的运行原理,当我们訪问数据库的数据时候,首先不是从数 ...
- sed原理及sed命令格式 ,缓存区,模式空间
4.1 Sed工作原理 sed是一个非交互式的流编辑器.所谓非交互式,是指使用sed只能在命令行下输入编辑命令来编辑文本,然后在屏幕上查看输出:而所谓流编辑器,是指sed每次只从 ...
- C语言之清空缓存区
感谢大佬:https://blog.csdn.net/qq_26768741/article/details/50933598 在C语言中,我们常常需要去清空缓存区,对于缓存区清空的重要性,接下来我们 ...
- node(Buffer缓存区)
// 创建buffer类 var buf=new buffer(10); var buf=new buffer([10,20,30,40]); var buf=new buffer("www ...
- ACM/ICPC 之 优先级队列+设置IO缓存区(TSH OJ-Schedule(任务调度))
一个裸的优先级队列(最大堆)题,但也有其他普通队列的做法.这道题我做了两天,结果发现是输入输出太过频繁,一直只能A掉55%的数据,其他都是TLE,如果将输入输出的数据放入缓存区,然后满区输出,可以将I ...
- git --如何撤销已放入缓存区(Index区)的修改
修改或新增的文件通过 git add --all 命令全部加入缓存区(index区)之后,使用 git status 查看状态(git status -s 简单模式查看状态,第一列本地库和缓存区的差异 ...
随机推荐
- Confluence 6 升级 Confluence 使用数据源
如果你对 Confluence 进行升级(手动或者使用安装器),你需要: 停止 Confluence (如果你已经尝试开始启动). 拷贝你的数据库驱动到 <installation-direct ...
- Linux 用户切换、修改用户名、修改密码
一.用户切换 "$":普通用户提示符 "#":root用户提示符 1.普通用户到root: 方式一:命令:su然后输入root密码 此种方式只是切换了root身 ...
- Feign服务消费者
Feign的优点:面向接口,完全不用管实现,传入规定格式的数据就可以了 搭建消费者项目(FeignDemo) 1.创建pom.xml <project xmlns="http://ma ...
- laravel 视图
在实际开发中,除了 API 路由返回指定格式数据对象外,大部分 Web 路由返回的都是视图,以便实现更加复杂的页面交互,我们在前面已经看到过了视图的定义方式: return view('以.分隔的视图 ...
- 饮冰三年-人工智能-linux-03 Linux文件管理(权限管理+归档+压缩)
1:对文件的权限管理 drwxr-xr-x. 最后一个.表示在安全情况下创建的.selinux a: d表示目录:-表示普通文件:l表示快捷方式:b设备文件 b:- 属主的权限 r:读权限:w:写权限 ...
- 出现xml错误的时候都是配置文件的名字没有改造成的
The error may exist in com/bjpowernode/dao/PlayerDao.xml
- python之字符编码
1.以什么编码存的就以什么编码取出; 内存固定使用unicode编码; 我们可以控制的编码是往硬盘存放或者基于网络传输选择编码. 2.数据是最先产生于内存中,是unicode格式,要想传输需要转成by ...
- Leetcode 344. 反转字符串
344. Reverse String 解题代码: class Solution { public: void reverseString(vector<char>& s) { , ...
- Html 文字排版
文字竖立排版,方法一 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="v ...
- SQL Server 常用函数使用方法
之前就想要把一些 SQL 的常用函数记录下来, 直到今天用到substring()这个函数,C# 里面这个方法起始值是 0,而 SQL 里面起始值是 1.傻傻分不清楚... 这篇博客作为记录 SQL ...