文件中指针移动的问题

charmw 2003-05-17 10:47:01
这程序的目的是将a.txt和b.txt作比较,把b.txt中有的而a.txt中没有的,输出到c.txt中。
源程序如下:
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <string.h>


void main()
{
ifstream fa;//fa指向a.txt
fa.open("a.txt",ios::in);
if(!fa)
{
cout<<"不能打开 a.txt!"<<'\n';
exit(1);
}

ifstream fb;//fb指向b.txt
fb.open("b.txt",ios::in);
if(!fb)
{
cout<<"不能打开 b.txt!"<<'\n';
exit(1);
}

ofstream fc;//fc指向c.txt
fc.open("c.txt",ios::app);
if(!fc)
{
cout<<"不能打开 c.txt!"<<'\n';
exit(1);
}
/*-------------操作--------------------------*/
char buff_b[60],buff_a[60];
int tag=0;

while(fb.getline(buff_b,60))
{
cout<<buff_b<<'\n';

while(fa.getline(buff_a,60))
{
cout<<" "<<buff_a<<'\n';
if(strcmp(buff_a,buff_b)==0)
{
tag=1;
cout<<" break1"<<'\n';
break;
}
}

{
if(fa.seekg(0))//将fa中的指针移到开头
cout<<"-----------移动指针-----------\n";
}

if(tag==0)
{
fc<<buff_b<<'\n';
}
else
{
tag=0;
}
}


/*-----------------------------------------------*/
fa.close();
fb.close();
fc.close();
}

a.txt为:
强大
深蓝色
备选
工人
有限责任公司
工厂
转会

b.txt为:
强大
工人
工作
工厂
你好

显示器上输出如下:
强大
强大
break1
-----------移动指针-----------
工人
强大
深蓝色
备选
工人
break1
-----------移动指针-----------
工作
强大
深蓝色
备选
工人
有限责任公司
工厂
转会
工厂
你好


其中出现了一个奇怪的问题:在“工作”比较完之后fa.seekg(0)不在起作用,不能将指针回到开头。

请问 这是什么原因?该怎么办?
...全文
104 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
charmw 2003-05-22
  • 打赏
  • 举报
回复
好的,再次感谢您对我的帮助!
fiveyes 2003-05-21
  • 打赏
  • 举报
回复
文件结束标志其实就是流的某些状态。

首先请一定要记住,流是一种对象。可是流这个东西很常用,大多数人在没接触到对象的时候,已经把cout和cin使用得很熟练了,所以往往忘记了这一点,不过它们的的确确都是对象,而且是很复杂的对象。

对象里面就有成员,其中有一些成员,就是流对象用来表示自己的一些状态的:(以下抄自《C++程序设计语言》)

在basic_istream的基类basic_ios里(在<ios>),可以找到流的各种状态:

template<class Ch, class Tr = char_traits<Ch>>
class basic_ios : public ios_base {
public:
// ...

bool good() const; // 下一个操作可能成功
bool eof() const; //遇到文件结束,就是它在和你捣蛋了。
bool fail() const; //下一个操作将失败
bool bad() const; // 流已破坏

iostate rdstate() const; // 取io状态标志
void clear( iostate f = goodbit ); // 设置io流状态

// 下边不抄了,总之流也是对象就是了
};

从名字basic_XXXXX可以猜想,这些类仅仅用来繁殖后代,从它们可以派生出许多有用的类来,而它们本身则不能创建任何对象。不过也不一定对哦,因为这是我猜的。^_^
charmw 2003-05-20
  • 打赏
  • 举报
回复
问题已经在你的帮助下解决了。但还有东西问你。
所谓的流中的文件结束标志 是什么意思,能否介绍一下:)
fiveyes 2003-05-17
  • 打赏
  • 举报
回复
fa.clear();

这样可以清除掉流中的文件结束标志。

69,364

社区成员

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

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