社区
新手乐园
帖子详情
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
打赏
收藏
while(in>>str ,!in.eof())有点不理解。。
while(in>>str ,!in.eof()) 书上说这句话是 遇到结束符之前一直读入数据 可是没有遇到结束符!in.eof()置1 返回true 应该是执行循环体的语句 !in.eof()遇到结束符置0, 返回false 应该是跳出循环 不知道哪里理解错了。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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语句没有显示 感觉应该是没有执行循环体
循环条件中使用逗号
while(cin >> ival, !cin.
eof
() ) { ... } 逗号操作符的求解过程:首先计算它的每一个操作数,然后返回最右边操作数作为整个操作的结果。 因此,循环条件只读入cin而忽略了其结果,该条件的结果是!cin.
eof
()。如果cin到达文件结束符,退出循环。如果cin没有到达文件结束符,则 不管在读取时是否发生了其他可能遇到的错误,都将进入循环。
cin>>和cin.get()对
EOF
的处理机制有什么不同
请问cin>>和cin.get()对
EOF
的处理机制有什么不同? #include #include using namespace std; int main() { char c; while(!cin.
eof
()) cin.get(c);//cin>>c; return 0; } 采用cin.get()的时候运行时输入一个^
C++
eof
()函数相关应用技巧分享
C++编程语言中的很多功能在我们的实际应用中起着非常大的作用。比如在对文件文本的操作上,就可以用多种方式来实现。在这里我们介绍的C++
eof
()函数就是其中一个比较常用的基本函数。 在使用C/C++读文件的时候,一定都使用过C++
eof
()函数来判断文件是否为空或者是否读到文件结尾了,也会在使用这个函数的过程中遇到一些问题,如不能准确的判断是否为空或者是否到了文件尾,以至于有些人可能还会怀疑...
C++
eof
while(!in.
eof
()){ in >>
str
;//空字符都会结束输入 cout <<
str
<< endl; }有可能最后字符重复输出:因为if
str
eam 是读取文件读到不能再读的时候,就设置
EOF
,所以读取最后字符后,还未设置
EOF
,再读未读到是设置
EOF
注:
EOF
是流中的,不是文件中,文件中并未有
EOF
标志。
文件读取信息,关于
eof
()多读取一次的问题
eod 是end of file的缩写 。 将 while(file.
eof
() != 1){ file >>
str
; } 改成: while(file.peek() !=
EOF
){ file >>
str
; }
新手乐园
33,311
社区成员
41,784
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章