我无法将文件中的数据读入类中的列表。似乎某个额外的十六进制值正在某处被拾取。
数据(我希望输出的样子)
输出(随机包含额外的0x4463c4)
以下是我认为相关的一些代码。任何人都可以告诉我我可能犯的错误吗?
数据从文件(主要)读入程序的位置:
struct filmType
{
char number[6];
char copy;
char title[31];
char rent_id[5];
char rent_date[9];
char return_date[9];
};
orderedList <filmType> orderedList;
filmType newItem;
//start of struct record
filmFile.open("films.txt", ios::in);
filmFile >> numFilm;
filmFile.get();
while (!filmFile.eof())
{
filmData.copy = filmFile.get();
readString(filmFile, newItem.title,30);
readString(filmFile, newItem.rent_id,4);
readString(filmFile, newItem.rent_date,8);
readString(filmFile, newItem.return_date,8);
filmFile.get();
orderedList.insert (newItem);
readString(filmFile, filmData.number,5);
}
orderedlist.insert函数:(在课堂上填写列表)
void orderedList<elemType>::insert(const elemType& newItem)
{
int index = length - 1;
bool found = false;
if (length == MAX_LIST)
throw string ("List full - no insertion");
// index of rear is current value of length
while (! found && index >= 0)
if (newItem < list[index])
{
list[index + 1] = list [index]; // move item down
--index;
}
else
found = true;
list [index + 1] = newItem; // insert new item
++length;
}
Orderedlist.display功能:(将列表输出到控制台)
void orderedList<elemType>::display() const
{
int index;
if (length == 0)
throw string ("List empty");
for (index = 0; index < length; ++ index)
cout << list[index] << endl;
}
readString:
void readString (fstream & inFile, char * string, int length)
{
inFile.get (string, length + 1);
}
感谢任何帮助,如果需要澄清任何内容或者需要查看程序中的更多代码,请告诉我。谢谢!
答案 0 :(得分:0)
您将结构对象传递给cout,后者不知道如何显示它们。您获得的十六进制值是结构对象地址。
答案 1 :(得分:0)
.eof()
将不会返回true
。这意味着最后一个循环:
while (!filmFile.eof()) //last read worked ok!
{
filmData.copy = filmFile.get(); //oh, reached end now. read in nothing
这意味着该循环的其余部分不正确。通常,模式是这样的:
filmFile.open("films.txt", ios::in);
while (readString(filmFile, filmData.number,5)) {
filmFile.get(filmData.copy)
readString(filmFile, newItem.title,30);
readString(filmFile, newItem.rent_id,4);
readString(filmFile, newItem.rent_date,8);
readString(filmFile, newItem.return_date,8);
filmFile.get();
if (filmFile) //make sure there weren't errors
orderedList.insert (newItem);
};
fstream& readString (fstream & inFile, char * string, int length)
{
return inFile.get (string, length + 1);
}
这意味着一旦读取失败(来自eof),while
条件就会失败,并且会突然出现。