关于feof()的bug??

这是我针对feof()错误有专门写的一个简单的测试.

1.写5条记录到文件,每条一个字串,一个整数。

2。从文件里读出,结果feof()无法识别。

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
	char *str[5] = {"first","second", "third","fourth","fifty"};
	int  index[5] = {0, 1, 2, 3, 4};	
	FILE* stream;
	//write 5 record in file, each record is a string and int.
	stream = fopen("c:\\nickfile.txt", "w+b");
	for (int i=0; i<5; i++)
	{
		fwrite((void*)str[i], sizeof(char), strlen(str[i]), stream);
		fputc('\0', stream);   //use null for end
		fwrite((void*)(&index[i]), sizeof(int), 1, stream);
	}
	FILE* file;
	fclose(stream);
	char buffer[20], ch;
	char* ptr = buffer;
	int number;
		
	file = fopen("c:\\nickfile.txt", "r+b");
	while(!feof(file))   //this is not functioning well!!
	{
		ptr = buffer;
		do
		{
			ch = fgetc(file);
			*ptr = ch;
			ptr++;
		}
		while (ch!='\0');
		cout<<"str is:"<<buffer<<endl;
		fread((void*)(&number), sizeof(int), 1, file);
		cout<<"index is:"<<number<<endl;
	}
	
	return 0;
}

3。 我问了学校里c++的老师,她的意思这仿佛是一个人人皆知的bug.她说如果用fstream的类,就不会有问题,我就又写
了一个测试。如下:
4。数据之间用换行符隔开,这应该是ofstream的默认吧。结果,ifstream.eof()函数正常。
 
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
	char *str[5] = {"first","second", "third","fourth","fifty"};
	int  index[5] = {0, 1, 2, 3, 4};	
	ofstream out;
	out.open("c:\\nickfile.txt");
	for (int i=0; i< 5; i++)
	{
		out<<'\n'<<str[i];
		out<<'\n'<<index[i];
	}
	out.close();
	char buffer[20];
	int number;
	ifstream in;
	in.open("c:\\nickfile.txt");
	while (!in.eof())
	{
		in>>buffer;
		cout<<"str is:"<<buffer<<endl;
		in>>number;
		cout<<"number is:"<<number<<endl;
	}	
	return 0;
}
 

 

                                                         back.gif (341 bytes)       up.gif (335 bytes)         next.gif (337 bytes)

Hosted by www.Geocities.ws

1