cin重定向到文件后, 为什么文件最后一个字符要读两遍?

skymartin 2008-02-19 10:55:31
#include <iostream>
using namespace std;

int main()
{
char c;
while( !cin.eof() )
{
cin >> c;
cout << c << endl;
}

return 0;
}

文件ins.txt包含下面内容:
ab

运行这个程序(Fedora)
./main < ins.txt

输出:
a
b
b

为什么最后一个'b'要读两遍呢?
...全文
176 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
techq 2010-03-03
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

int main()
{

}

taodm 2008-02-19
  • 打赏
  • 举报
回复
while( !cin.eof() )
{
cin > > c;
cout < < c < < endl;
c = 'x';
}
yuanchuang 2008-02-19
  • 打赏
  • 举报
回复
我感觉已经说得比较清楚了:)
skymartin 2008-02-19
  • 打赏
  • 举报
回复
我想问的是为什么最后一个字符读了两遍, 不是找另外一个alternative.
yuanchuang 2008-02-19
  • 打赏
  • 举报
回复
读到结尾,还要再读次cin.eof()才为真,而这最后一次,没有读取到数据,保存的是上次读取的数据。
所以在你看来读取了两次,呵呵。
taodm 2008-02-19
  • 打赏
  • 举报
回复
while( cin > > c)
{
cout < < c < < endl;
}

64,678

社区成员

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

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