fstream.getline及clear使用疑问-在线等回复

dingo2000 2006-11-24 01:25:10
代码:
#include <fstream>
#include <iostream>
using namespace std;

int main(int argc, char **argv)
{
fstream ctrl;
char cTmp[101];
ctrl.open("f1.ctrl");
while(ctrl.getline(cTmp,100))
{
cerr<<"getline "<<cTmp<<endl;
}
cerr<<"close" <<endl;
ctrl.close();
ctrl.open("f2.ctrl");
while(ctrl.getline(cTmp,100))
{
cerr<<"getline "<<cTmp<<endl;
}
cerr<<"close" <<endl;
ctrl.close();

return 0;
}
文件:
f1.ctrl及f2.ctrl
内容都为
row1
row2
(注意:row2后没跟回车换行)

输出结果为
getline row1
getline row2
close
close

第二个文件读不出来了。
如果我在close()前,先加clear()或者,在文件中的row2后面加回车换行,输出结果为:
getline row1
getline row2
close
getline row1
getline row2
close

为什么getline有空行的时候可以不用clear,而没空行就必要用clear?
...全文
807 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dingo2000 2006-11-24
  • 打赏
  • 举报
回复
哦,明白了

如果为回车,即读取失败
getline会重置一个状态

谢谢你们
KthTes 2006-11-24
  • 打赏
  • 举报
回复
我以前也遇到过。

如果只用一个fstream,那么在干完一个文件之后好像必须.clear(),我记得作用是清除什么标志位什么的,记不太清楚了。那次我是用一个fstream对象,先读,后写。必须要.clear()。你说不.clear()也行我估计可能只是碰巧。
飞哥 2006-11-24
  • 打赏
  • 举报
回复
还没这么写过

就该是getline指针的问题
getline指针在读取一行后,指针移动下一行

如果为回车,即读取失败
getline会重置一个状态
dingo2000 2006-11-24
  • 打赏
  • 举报
回复
谢谢你来顶,顶者有分~~~~

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧