这是什么,我怎么看不懂。

ylredsun 2001-09-08 09:52:12
#include <fstream.h>
main()
{
ifstream in("in.dat");
while(in.get(*cout.rdbuf()))
in.ignore();
}

当本地路径下有in.dat文件时,输出的是不带任何换行符的in.dat文件的内容,我实在是不太明白,为什么会有此结果。

in.ignore()又是什么意思呢,它有什么作用呢,望各位前辈给与指点。
...全文
104 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
krerix 2001-09-14
  • 打赏
  • 举报
回复
gz
ylredsun 2001-09-13
  • 打赏
  • 举报
回复
我把程序改成如下:
#include <fstream.h>
main()
{
ifstream in("in.dat");
while(in.get(*cout.rdbuf()))
cout.flush();
}
结果照样什么也看不到,不知qqchen79,你上面所指是什么意思,敬请明示。
qqchen79 2001-09-11
  • 打赏
  • 举报
回复
带缓冲的!用cout.flush试试
sr388 2001-09-11
  • 打赏
  • 举报
回复
真复杂
ylredsun 2001-09-11
  • 打赏
  • 举报
回复
但是照你上面所说,应该还是会显示第一行的字符啊?
qqchen79 2001-09-11
  • 打赏
  • 举报
回复
去掉in.ignore()以后,可怜的\n就会滞留在缓冲区当中,get也会被它阻挡而无法去到后面的字符。
fsb_12345 2001-09-10
  • 打赏
  • 举报
回复
up
ylredsun 2001-09-09
  • 打赏
  • 举报
回复
但是当我把in.ignore();去掉换成一个空语句时,为什么会什么也看不到了呢?
gri 2001-09-09
  • 打赏
  • 举报
回复
qqchen79
you are good.
三杯倒 2001-09-09
  • 打赏
  • 举报
回复
up~
qqchen79 2001-09-08
  • 打赏
  • 举报
回复
cout.rdbuf()返回的是标准输出的缓冲区对象streambuf的地址。
in.get(*cout.rdbuf())等同于in.get(*cout.rdbuf(), widen('\n')). 也就是从cin中读取字符并放到cout的缓冲区中(就是输出到标准输出啦!),直到遇到换行符为止。
get遇到换行符是返回,但并不把换行符从输入流中删除,in.ignore()的作用恰好是从in的输入流中清除下一个字符(这里正好是'\n')。
所以...

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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