seekg前记得手动清除EOF标志位
2016-04-27 19:56
141 查看
问题
因为具体任务,需要一个文件读取两遍。之前在第一次读取完毕后(此时EOF已经置位),直接调用
is.seekg(0,is.beg) ;
然后下次读取时直接退出了,即EOF标志位并没有被清除。
查看C++标准库说明:
C++98 If the eofbit flag is set before the call, the function fails (sets failbit and returns). C++11 The function clears the eofbit flag, if set before the call.
可以看到,按照标准库说法,C++98时如果EOF被置位,那么调用seekg会失败;但是在C++11中,上面说会首先清除EOF标志位。
然而,我测试
g++ 4.8.5, 指定
-std=c++11, 以及使用
VS2015,发现seekg均失败。
照理说这些编译器应该都实现C++11标准了,然而这个问题依然如此。
这还是有些尴尬的。标准一回事、实现一回事,而且两个主要实现都不支持新标准…
不得不让我联想起
空穴来风这个成语来了…
解决
一定在seekg之前手动
clear掉(EOF)标志位。
is.claer() ; is.seekg(0 , is.beg) ;
相关文章推荐
- 颓废了好久 拾起当初的梦 虚幻4初学 我要做我自己的游戏
- nginx 后端服务器配置端口 request.getserverPort
- android---世界时区列表
- IO库总结——C++Primer第八章
- HDOJ 2063 过山车【匈牙利算法求二分图最大匹配 DFS增广 BFS增广】
- ionic入门教程第十三课-多级分类列表的简单实现
- Android 批量上传图片进度回调
- Java的网络编程-Socket编程
- HDU 1532 最大流模板题
- 团队作业四
- android---对SharePreferences的封装
- Java JDBC | 四种连接数据库的方法
- android---瀑布流gridview
- BZOJ 1211: [HNOI2004]树的计数 purfer序列
- 清爽的 cocos 对象 双击 逻辑
- Connection closed by foreign host
- windows下使用caffe的lmdb数据库问题
- 团队管理核心十点!必须谨记
- 【NOI2015模拟YDC】游戏
- JavaScript求数组中的最大值和最小值