事情起因
帮朋友修改她的数据结构课设时,整体都几乎完善了,但运行过程中会莫名其妙地崩溃。检查了一下代码,几乎没有问题,编译器编译也是0 Waning 0 error
。
找着就找到了程序运行时生成的文件,发现文件中会莫名其妙出现如下乱码。
另外关于此处数据导出和导入的程序如下:
ofstream employee("employee.txt" , ios::out);
if (!employee.is_open())//判断是否成功打开
{
cout << "文件打开失败!"<<endl;
exit(0);
}
while (l!=NULL)// 将employee类的数据逐一保存到外部文件
{
employee << l->id << " " << l->name << " " << l->sex << " " << l->phone <<endl ;
l = l->next;
}
employee.close();//关闭文件
Listfree(L);
ifstream employee("employee.txt");
while (!employee.eof())
{
Linklist l;
Initlist(l);
employee >> l->id >> l->name >>l->sex >>l->phone ;
if(L->next!=NULL)
{
L_bat = L->next;
l->next = L->next;
}
L->next = l;
}
employee.close();
调查
查阅资料得知:
通过eof()判断文件结束,若某行只有回车也算是一行,即使在文件尾部
运行几次也是可以验证,就是数据导出时的换行符生成的新行影响了数据读取,进而导致乱码。
处理
目前个人想到的一个处理过程就是:
对最后一行"多余"的数据进行抛弃
代码如下
Linklist L_bat;
Initlist(L_bat);
ifstream employee("employee.txt");//打开txt文件
while (!employee.eof())
{
Linklist l;
Initlist(l);
employee >> l->id >> l->name >>l->sex >>l->phone ;
if(L->next!=NULL)
{
L_bat = L->next;
l->next = L->next;
}
L->next = l;
}
L->next = L_bat;
employee.close();//关闭文件
1 条评论
《超灵体阿公》喜剧片高清在线免费观看:https://www.jgz518.com/xingkong/24249.html