关于流的输入状态的疑问

hbwin2006 2006-07-04 01:14:09
void main()
{
char s[100];
ifstream in("d:\\a.txt"); //这个文件只有一行,而且小于100个字符
in.getline(s,100);
if (in.eof()) cout<<"结束状态1"; 
if (!in) cout<<"结束状态2"
}


运行结果是"结束状态1".
可是 !in 和 in.eof()的返回值不是一样的吗,怎么这里是不同的,想不明白.
...全文
115 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmosquito 2006-07-05
  • 打赏
  • 举报
回复
in.eof()指流是否结束

in 指流的状态是否error,

!in != in.eof

文件结束状态还是good,此时如果还继续读,则状态就error
qiqi162002 2006-07-05
  • 打赏
  • 举报
回复
前者是判断是否结束文件了,,后者是判断文件读状态如何.
rollor_phoe 2006-07-04
  • 打赏
  • 举报
回复
会返回false但不是in返回false。
tidyduck 2006-07-04
  • 打赏
  • 举报
回复
可是 !in 和 in.eof()的返回值不是一样的吗,怎么这里是不同的,想不明白
---------------------------------------------------------------------------]
楼主,你搞错了,if(in.eof())的意思是文件到结束的话返回true。
而if(in)是ifstream in("d:\\a.txt"); 这一句执行成功的话,也就是文件成功打开的话就返回true。而楼主你的文件已打开成功了,所以if(in)会一直返回true。
而楼主用的if(!in)就会一直返回false了,它后面的语句当然就不能执行了。

------------------------------------------------------------------------------------]
这个也不太对吧?ifstream对象在读取结束的时候好像也是会返回false的
rollor_phoe 2006-07-04
  • 打赏
  • 举报
回复
可是 !in 和 in.eof()的返回值不是一样的吗,怎么这里是不同的,想不明白
---------------------------------------------------------------------------]
楼主,你搞错了,if(in.eof())的意思是文件到结束的话返回true。
而if(in)是ifstream in("d:\\a.txt"); 这一句执行成功的话,也就是文件成功打开的话就返回true。而楼主你的文件已打开成功了,所以if(in)会一直返回true。
而楼主用的if(!in)就会一直返回false了,它后面的语句当然就不能执行了。
gold123d 2006-07-04
  • 打赏
  • 举报
回复
ifstream in("d:\\a.txt");这一行是不是要这样的ifstream in("d:\\a.txt",ios::in|ios::out);??
rollor_phoe 2006-07-04
  • 打赏
  • 举报
回复
ifstream in("d:\\a.txt");这一行是不是要这样的ifstream in("d:\\a.txt",ios::in|ios::out);??

----------------------------------------------------------------------------
不这样写也是可以的,它有默认参数,可以不写。


in.getline(s,100);这句话改成这样试试getline(in,s);
du51 2006-07-04
  • 打赏
  • 举报
回复
in==in.fail()
rdstate
{
good,eof,fail,bad
}

64,654

社区成员

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

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