关于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; }