C++ 读取文件的最后一行并输入到链接列表时出错
所以我正在为我的班级做一个作业,在作业中我必须从一个文件中读取数据,并用它创建一个双链接列表。我已经完成了所有困难的事情,现在我遇到了一个问题,我的程序抛出了一堆随机字符,并在最后一行自杀 下面是读取数据并将其插入我的链接列表的函数。这是我的教授写的,坦率地说,我不太明白C++ 读取文件的最后一行并输入到链接列表时出错,c++,C++,所以我正在为我的班级做一个作业,在作业中我必须从一个文件中读取数据,并用它创建一个双链接列表。我已经完成了所有困难的事情,现在我遇到了一个问题,我的程序抛出了一堆随机字符,并在最后一行自杀 下面是读取数据并将其插入我的链接列表的函数。这是我的教授写的,坦率地说,我不太明白 void PropogateTheList(ifstream & f, LinkList & ML) { static PieCake_struct * record; record= new PieC
void PropogateTheList(ifstream & f, LinkList & ML)
{
static PieCake_struct * record;
record= new PieCake_struct;
f>>record->id>>record->lname>>record->fname>>record->mi>>record->sex>>record->pORc;
while(!f.eof())
{
ML.Insert(record);
record = new PieCake_struct;
f>>record->id>>record->lname>>record->fname>>record->mi>>record->sex>>record->pORc;
}
}
以下是正在传播的数据:
1 Abay Harege N O C
2 Adcock Leand R F P
3 Anderson Logan B M P
5 Bautista Gloria A F P
10 Beckett Dallas B F C
12 Ambrose Bridget C F C
13 Beekmann Marvin D M P
14 Bacaner Tate D M C
16 Bis Daniel F M P
18 Dale Kaleisa G F C
19 DaCosta Ricardo H M P
23 Adeyemo Oluwanifemi I M C
24 Berger Chelsea J F C
38 Daniels Jazmyn K F P
39 Davis Takaiyh L F C
40 DeJesus Gabriel M M P
51 Castro Floriana N F P
52 Chen Justin O M C
53 Clouden Ariel P F P
54 Conroy Cameron Q M C
61 Contreras Dominic R M P
62 Cooley Kyle S M C
63 Creighton Cara T F P
64 Cullen William U M C
66 Blakey Casey V M C
67 Barbosa Anilda W F P
83 Brecher Benjamin X M P
84 Boulos Alexandre Y F C
85 Barrios Joshua Z M C
85 Bonaventura Nash A M P
86 Bohnsack David B M C
87 Blume Jeffrey C M P
90 Burgman Megan D F C
91 Bursic Gregory E M P
92 Calvo Sajoni F F C
93 Cannan Austin G M P
94 Carballo Nicholas H M C
99 AlbarDiaz Matias I F P
目前,我根据姓氏按字母顺序对数据进行排序,所以大约在第5行,当它试图打印出99号时,它就死了。如果我以另一种方式对列表排序,程序总是会弄乱最后一行数据。任何帮助都会很好
更新:
所以我试着实现一个if!。在插入之前执行eof,但不幸的是,它什么都不做。我删除了最后一个数据,从而使人感到不安。这是我的函数输出的内容:
****** The CheeseCake Survey ******
Id Last Name First Name MI Sex Pie/Cake
-- -------- --------- -- --- --------
2 Adcock
23 Adeyemo
12 Ambrose
3 Anderson
14 Bacaner
67 Barbosa
85 Barrios
5 Bautista
10 Beckett
13 Beekmann
24 Berger
16 Bis
66 Blakey
87 Blume
86 Bohnsack
85 Bonaventura
84 Boulos
83 Brecher
90 Burgman
91 Bursic
92 Calvo
93 Cannan
0 Carballo????NicholasA8?zL`8?zL`A8?zL`8?zL`??
如果先从流中读取数据,然后检查它是否处于eof状态,并在此基础上插入元素,不是更好吗?在编辑框中,我在没有编译器帮助的情况下编写以下代码,因此,如果我犯了任何错误,我深表歉意。当然,问题出现了,或者我想的是,如果你试图从你的f流中读取eof结果为真的话,会发生什么。要了解更多信息,请查看以下链接:
你会提供你得到的任何错误吗?你的教授需要阅读。故意的内存泄漏不是解决该问题的可接受的解决方法。这个静态变量很奇怪,这能回答你的问题吗?你的教授不应该教C++。像这样的东西真的解释了这里的一些其他问题。我更新了代码并尝试了if检查,我还添加了我得到的特定输出。我尝试了,但不幸的是,没有什么不同。您的输入文件是否有足够的日期安装在PieCake_结构中?是的,所有输入都正确,我可以完美地输出所有内容,唯一的输出错误发生在最后一行的任何数据上。
void PropogateTheList(ifstream & f, LinkList & ML)
{
while(!f.eof())
{
static PieCake_struct * = new PieCake_struct;
f>>record->id>>record->lname>>record->fname>>record->mi>>record->sex>>record->pORc;
if(!f.eof())
ML.Insert(record);
}
}