C++ IO的一些注意点
读入这个坑一直以来都深受其麻烦,把遇到一些注意点记一下吧。
1.getchar读入
以前练线段树的时候做到Acwing#246 Interval GCD(原题在CodeHunter上,人懒就在Acwing上交了),怎么调也调不过去,样例和手造的数据统统没有问题,当时甚至怀疑数据出问题了拿人家题解交了一发,发现过了然后特别自闭,后来整了好久才发现是读入的锅,实测的数据可能没有给的样例那样整齐有序,把
type=getchar();
改成
do type=getchar(); while(type!='C'&&type!='Q');
然后就过了2333。
调代码期间收获了4*Segmentation Fault,10*Wrong Answer,1*Time Limit Exceeded,现在看着都害怕。
getchar读入时一定要while判断一下读进了什么东西。
2.cin去同步
上次模拟赛读入图快,cin去同步+getchar()读字符串,然后我就错失了一次绝佳的AK的机会。。
本地里跑得可好了,结果成绩出来获得了爆零的好成绩,Linux上连样例都跑不过,赛后把去同步删掉结果就AC了。
去网上了解了一下,istream本身读入时是和cstdio共用一个缓冲区的,输入的数据先进入缓冲区,然后两者都从中读入数据,而当加入
ios::sync_with_stdio(false);
的时候,iostream不再和cstdio同步使用同一个缓冲区,cin读完以后剩下的\n\t和空格都留在istream的缓冲区里,当你再调用cstdio的读入函数时,cstdio的缓冲区内没有数据,这时就会出现错误。所以去同步以后千万不能把两个库的函数混用,当然,这时快读也不能用了。
当时模拟赛竟然还有数据返回Dangerous Syscalls,这冲突也是严重啊。
3.快读read()调用
这也是一个奇怪的坑,不过这种在调样例的时候一般是能发现的

如果直接将读入结果作为实参传到函数里,那实际函数得到的参数是和读入顺序相反的,不大清楚具体是什么原因,应该和c++内部函数的机制有关吧。
快读最好先将数据保存到变量再处理。
C++ IO的一些注意点的更多相关文章
- VS2015编译GEOS
下载链接:http://trac.osgeo.org/geos/ 1. 打开cmake,加载geos源码和定位geos的工程存放位置: 2.点击configure,会报错,首先设置CMAKE_INST ...
- 高性能IO模型浅析
高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking ...
- 深究标准IO的缓存
前言 在最近看了APUE的标准IO部分之后感觉对标准IO的缓存太模糊,没有搞明白,APUE中关于缓存的部分一笔带过,没有深究缓存的实现原理,这样一本被吹上天的书为什么不讲透彻呢?今天早上爬起来赶紧找了 ...
- [APUE]标准IO库(下)
一.标准IO的效率 对比以下四个程序的用户CPU.系统CPU与时钟时间对比 程序1:系统IO 程序2:标准IO getc版本 程序3:标准IO fgets版本 结果: [注:该表截取自APUE,上表中 ...
- [APUE]标准IO库(上)
一.流和FILE对象 系统IO都是针对文件描述符,当打开一个文件时,即返回一个文件描述符,然后用该文件描述符来进行下面的操作,而对于标准IO库,它们的操作则是围绕流(stream)进行的. 当打开一个 ...
- [.NET] 利用 async & await 进行异步 IO 操作
利用 async & await 进行异步 IO 操作 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6082673.html 序 上次,博主 ...
- [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化
KVM 虚拟化原理探究(6)- 块设备IO虚拟化 标签(空格分隔): KVM [toc] 块设备IO虚拟化简介 上一篇文章讲到了网络IO虚拟化,作为另外一个重要的虚拟化资源,块设备IO的虚拟化也是同样 ...
- [原] KVM 虚拟化原理探究(5)— 网络IO虚拟化
KVM 虚拟化原理探究(5)- 网络IO虚拟化 标签(空格分隔): KVM IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理.作为一个完整的风诺依曼计算机系统,必然有输 ...
- Performance Monitor4:监控SQL Server的IO性能
SQL Server的IO性能受到物理Disk的IO延迟和SQL Server内部执行的IO操作的影响.在监控Disk性能时,最主要的度量值(metric)是IO延迟,IO延迟是指从Applicati ...
- java.IO输入输出流:过滤流:buffer流和data流
java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...
随机推荐
- 5.pandas新增数据列
有的时候,表格自带的数据根本没有办法满足我们,我们经常会新加一列数据或者对原有的数据进行修改 还是接着上篇文章的数据进行操作 直接赋值 我想算一下每一天的温差 df.loc[:, 'wencha'] ...
- GhostNet: More Features from Cheap Operations
论文:GhostNet: More Features from Cheap Operations,CVPR 2020 代码:https://github.com/iamhankai/ghostnet. ...
- 设备管理的数据库路径是/storage/sdcard0/data/devuce-db
设备管理的数据库路径是/storage/sdcard0/data/devuce-db 数据库文件名全路径是/storage/sdcard0/data/devuce-db/device.db 数据库文件 ...
- 一个使用android相机的例子,二维码必须用相机
https://blog.csdn.net/feiduclear_up/article/details/51968975
- socket网络
Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...
- Android:沉浸式状态栏(二)集成
在Activity的onCreate()方法中添加代码 //设置状态栏透明 StatusBarUtil.setTranslucentStatus(this); //设置透明状态栏的paddingTop ...
- 机器学习笔记簿 降维篇 PCA 01
降维是机器学习中十分重要的部分,降维就是通过一个特定的映射(可以是线性的或非线性的)将高维数据转换为低维数据,从而达到一些特定的效果,所以降维算法最重要的就是找到这一个映射.主成分分析(Princip ...
- activiti7 导出bpmn文件
最近在学习springboot+activiti7整合,想做一个导出bpmn文件的功能,查了相关资料,最后没有实现.最后查看了一下代码 找到了方法 如下所示 @GetMapping("exp ...
- 实战:docker搭建FastDFS文件系统并集成SpringBoot
实战:docker搭建FastDFS文件系统并集成SpringBoot 前言 15年的时候,那时候云存储还远远没有现在使用的这么广泛,归根结底就是成本和安全问题,记得那时候我待的公司是做建站开发的,前 ...
- NameNode中的高可用方案
NN中元数据的可靠性是可以保证的,但是其可用性并不高,因为Namenode是单节点的,所以一旦这个节点不能工作,那么整个hdfs都不能工作,但是由于SecondaryNameNode的机制,所以,即便 ...