C++文件流public function—eof()

在读取文件时,C++读取文件操作在判断文件结尾时都需用到eof()函数,但在使用该函数时经常会碰到结尾多读一个字符的情况,即末位字符重复出现一次。

出现这种情况的原因:

文件的结尾都有一个不可见尾字符——oxff,该字符标志文件的结束;C++文件流中eof()函数在读到文件末尾时,并不会立刻返回true,而是停顿一下,再读一次,于是就出现了末位字符重复出现的情况。

解决方法:

此时C++文件流中的good()函数就能发挥作用了,在对文件读入的字符操作前,使用文件对象调用good()函数进行判断,例如:

if(readFile.good()){
//在此处写入对读入字符的操作,例如:
cout<<ch;
}
或者调用函数peek(),peek()函数并不会真正读取下一个字符,即文件指针并不会向后移动一位,只是查看缓冲区中的下一个元素。例如:

if(readFile.peek()!=EOF){
   readFile>>ch;
   cout<<ch<<ends;
}
以上两种方法都不能解决此类问题;下面讲述一个C++文件读取的例子,主要用于学习文件流中的函数的使用。

1.打开文件

在C语言中,打开文件调用函数fopen,加上if条件句构成若打开错误则对出错情况进行处理的代码,在C++中可以这么写:

		ifstream readFile;
		readFile.open(fileName);
		//打开文件不成功,终止
		if (readFile.fail()){
			exit(1);
		}
		//打开文件成功
		if (readFile.is_open()){
                       //打开成功,在此处写对文件内容操作的代码
			}
C++文件流中fail()函数可用于判断是否成功关联文件和文件对象,他的意思是若打开失败则....(执行相关代码,最后调用exit(1);返回给系统结束程序运行)。

is_open()函数也有同样的功能,它的意思是若成功打开文件,则...(执行相关代码,此时不用调用exit(1))。

2.读文件,判断结尾

while (!readFile.eof()){
	//此处写代码
}
3.判断是否到结尾,防止重复读取末位字符

if (readFile.good()){
		//若未到结尾,则继续操作
}
4。关闭文件对象

readFile.close();

最后给出一个例子

	//构建串
	void StrAssign(string fileName){
		S = (Node *)malloc(sizeof(Node));
		ifstream readFile;
		readFile.open(fileName);
		//打开文件不成功,终止
		if (readFile.fail()){
			exit(1);
		}
		//打开文件成功,构建串
		if (readFile.is_open()){
			char ch;
			Node *r, *p;
			//尾插法
			r = S;
			//不断链接数据节点
			while (!readFile.eof()){
				readFile >> ch;
				if (readFile.good()){
					p = (Node *)malloc(sizeof(Node));
					p->data = ch;
					r->next = p;
					r = p;
				}
			}
			//处理尾节点指针域
			r->next = NULL;
		}
		//未成功打开文件,生成空串
		else{
			S->next = NULL;
		}
		readFile.close();
	}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值