| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 464 人关注过本帖
标题:关于写入文件数据时出现的一点问题
只看楼主 加入收藏
yijing21
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-11-7
收藏
 问题点数:0 回复次数:5 
关于写入文件数据时出现的一点问题
cout<<"请输入要删除的学号:";
    string str;
    cin>>str;
    list<student> ivec;
    ifstream in;
    in.open("stu.txt",ios::in);
    while(in)
    {
        student stu;
        in>>stu.num>>stu.name>>stu.score[0]>>stu.score[1]>>stu.score[2];
        ivec.push_back(stu);
    }
    
    for(list<student>::iterator it=ivec.begin();it!=ivec.end();)
    {
        if(it->num==str)
            it=ivec.erase(it);
        else
            ++it;
    }         

         list<student> ivec;
         ofstream out;
    out.open("stu.txt",ios::out);
    for(list<student>::iterator y=ivec.begin();y!=--ivec.end();++y)
    {
        out<<y->num<<"\t";
        out<<y->name<<"\t";
        out<<y->score[0]<<"\t";
        out<<y->score[1]<<"\t";
        out<<y->score[2]<<"\t";
    }

把一个结构体的数据写入文件 为什么迭代器那里要自减一次呢  不然会出现
03042201    ty    89    89    89    03042222    fg    85    81    83    
03042256    ty    89    89    89            89    89    89    
最后一项错误数据不知道是怎么出来的它3个数跟倒数第二项的数据是一样的 但是它没有前面的两项数据(学号和姓名)

[[it] 本帖最后由 yijing21 于 2008-4-19 09:46 编辑 [/it]]
搜索更多相关主题的帖子: 数据 文件 
2008-04-19 09:45
yijing21
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-11-7
收藏
得分:0 
没人知道吗 自己顶一下
2008-04-19 20:51
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
ivec.erase(it)
No reallocation occurs, so iterators and references become invalid only from the first element erased through the end of the sequence.

学习需要安静。。海盗要重新来过。。
2008-04-19 21:00
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
你的操作引起iterators失效了...

学习需要安静。。海盗要重新来过。。
2008-04-19 21:02
yijing21
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-11-7
收藏
得分:0 
应该不是迭代器失效的问题吧   是在写入的时候多出来一些数据  不知道怎么产生,就算是把erase()注释掉 结果还是产生这些数据啊
2008-04-20 10:33
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
是迭带器器的问题..不相信,你可以找到之后删除然后从跳出循环..然后在从新用一个迭带循环看看...如果找出处是在c++primer关于模板上有...

学习需要安静。。海盗要重新来过。。
2008-04-20 10:40
快速回复:关于写入文件数据时出现的一点问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021871 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved