while(in>>str ,!in.eof())有点不理解。。

我很笨 2011-06-09 12:34:59
while(in>>str ,!in.eof())

书上说这句话是 遇到结束符之前一直读入数据


可是没有遇到结束符!in.eof()置1 返回true 应该是执行循环体的语句

!in.eof()遇到结束符置0, 返回false 应该是跳出循环


不知道哪里理解错了。。。
...全文
645 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
www_adintr_com 2011-06-09
  • 打赏
  • 举报
回复 1
你的理解和书上的意思一样啊,哪里相反了?
没有结束, 执行循环, 读
结束了, 跳出循环, 不读了
那不就是 "遇到结束符之前一直读入数据" 吗?
我很笨 2011-06-09
  • 打赏
  • 举报
回复
从一个文件读入string 如果没有结束符 就不会执行循环体 和书上解释的一样

和我理解的正好相反 不知道哪里理解错了
bdmh 2011-06-09
  • 打赏
  • 举报
回复
什么情况下出问题,输入了什么
visayafan 2011-06-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 uskxbys3usb 的回复:]
while(in>>str ,!in.eof())

书上说这句话是 遇到结束符之前一直读入数据


可是没有遇到结束符!in.eof()置1 返回true 应该是执行循环体的语句

!in.eof()遇到结束符置0, 返回false 应该是跳出循环


不知道哪里理解错了。。。
[/Quote]
和while(in>>str,in)作用是一样的,在到达文件末尾前in都为真,到达文件末尾的时候in为假所以终止
while(in>>str,!in.eof())当到达文件末尾的时候in.eof()返回真,!in.eof()为假,所以退出循环。
我很笨 2011-06-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 adlay 的回复:]

可以显示呀, 只是这样会少显示一个字符串, 但是读是都读进来了的.
在 while 后面再加一个 cout<<str<<endl;就可以完整显示了.
[/Quote]

while循环中的那个cout没有显示 这点不太理解
www_adintr_com 2011-06-09
  • 打赏
  • 举报
回复
可以显示呀, 只是这样会少显示一个字符串, 但是读是都读进来了的.
在 while 后面再加一个 cout<<str<<endl;就可以完整显示了.
我很笨 2011-06-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 adlay 的回复:]

那就贴完整的代码,
完全有可能是其它地方的问题呀.
[/Quote]

get.cpp中while(in>>str)应该是while(in>>str ,!in.eof())
我很笨 2011-06-09
  • 打赏
  • 举报
回复
//main.cpp

#include<iostream>
#include<fstream>
#include<string>
#include"get.h"
using namespace std;

int main()
{
string filename;
ifstream infile;

while(cin>>filename)

{
infile.open(filename.c_str());
if(!infile)
{
cerr<<"input again:";
continue;
}
break;
}

get(infile);

return 0;
}



//get.cpp


#include"get.h"
#include<string>
using namespace std;

istream& get(istream& in)
{
string str;

while(in>>str)
{
if(in.bad())
throw runtime_error("error");
if(in.fail())
{
cerr<<"fail, input again:";
in.clear();
in.ignore(32);
continue;
}
cout<<str<<endl;
}
in.clear();
return in;
}

//get.h

#ifndef GET_H
#define GET_H

#include<iostream>

std::istream& get(std::istream& in);

#endif


www_adintr_com 2011-06-09
  • 打赏
  • 举报
回复
那就贴完整的代码,
完全有可能是其它地方的问题呀.
我很笨 2011-06-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 adlay 的回复:]

你的理解和书上的意思一样啊,哪里相反了?
没有结束, 执行循环, 读
结束了, 跳出循环, 不读了
那不就是 "遇到结束符之前一直读入数据" 吗?
[/Quote]

可是循环中的cout语句没有显示 感觉应该是没有执行循环体

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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