| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1705 人关注过本帖
标题:请问下面的错误 输出内存不能读取 不知道哪个指针有问题
只看楼主 加入收藏
万士心平
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-1-30
结帖率:55.56%
收藏
已结贴  问题点数:2 回复次数:11 
请问下面的错误 输出内存不能读取 不知道哪个指针有问题
图片附件: 游客没有浏览图片的权限,请 登录注册
   

    #include<iostream>
    #include<fstream>

    ofstream oFile;

    oFile.open("c:\\salary.dat",ios::out);

    char id[8];
    char name[20];
    double salary;
    double fee;
    double bonus;
    double delsalary;
    double realsalary;
    oFile<<"职工编号"<<"\t姓名"<<"\t基本工资"<<"\t奖金"<<"\t扣除"<<endl;
    for(int i=0;i<3;i++){
   
        cout<<"请输入员工编号: "; cin>>id;
        cout<<"请输入姓名: "; cin>>name;
        cout<<"请输入基本工资: "; cin>>salary;
        cout<<"请输入加班工资: "; cin>>fee;
        cout<<"请输入奖金: "; cin>>bonus;
        cout<<"请输入扣除: " ; cin>>delsalary;

        oFile<<id<<" "<<name<<" "<<salary<<" "<<fee<<" "<<bonus<<" "<<delsalary<<endl;
        }
    oFile.close();


    /*读取文件*/
    ifstream iFile;
   
    iFile.open("c:\\salary.dat",ios::in);

    cout<<"职工编号"<<"\t姓名"<<"\t基本工资"<<"\t奖金"<<"\t扣除"<<"\t实发工资"<<endl;
   
    while(!iFile.eof()){
   
        
        iFile>>id>>" ">>name>>" ">>salary>>" ">>fee>>" ">>bonus>>" ">>delsalary;
        
        realsalary=salary+bonus+fee-delsalary;//计算实发工资

        cout<<id<<"\t"<<name<<"\t"<<salary<<"\t"<<fee<<"\t"<<bonus<<"\t"<<delsalary<<"\t"<<realsalary<<endl;
        
        }
    iFile.close();
    }

在输入的时候没有问题 读取文件时候就输出一个 cout输出的文件 下面读取不了

 
搜索更多相关主题的帖子: 姓名 内存 include double 
2011-10-11 15:40
naruto01
Rank: 4
等 级:业余侠客
帖 子:103
专家分:280
注 册:2011-5-23
收藏
得分:2 
iFile>>id>>" ">>name>>" ">>salary>>" ">>fee>>" ">>bonus>>" ">>delsalary; 
iFile输出给" ",自然会引发内存访问错误。

2011-10-11 17:52
naruto01
Rank: 4
等 级:业余侠客
帖 子:103
专家分:280
注 册:2011-5-23
收藏
得分:0 
另外,这句代码欠缺一些考虑
2011-10-11 17:53
万士心平
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-1-30
收藏
得分:0 
回复 3楼 naruto01
非常感谢! 确实有点欠缺考虑! 空格属于常字符串 怎么能被赋值。。

  还有那什么为什么我的修改后 没有出现内存错误问题
但是且一直循环输出。。
程序代码:
    ofstream oFile;

    oFile.open("c:\\salary.dat",ios::out|ios::binary);

    char id[8];
    char name[20];
    double salary;
    double fee;
    double bonus;
    double delsalary;
    double realsalary;
    oFile<<"职工编号"<<"\t姓名"<<"\t基本工资"<<"\t奖金"<<"\t扣除"<<endl;
    for(int i=0;i<1;i++){
   
        cout<<"请输入员工编号: "; cin>>id;
        cout<<"请输入姓名: "; cin>>name;
        cout<<"请输入基本工资: "; cin>>salary;
        cout<<"请输入加班工资: "; cin>>fee;
        cout<<"请输入奖金: "; cin>>bonus;
        cout<<"请输入扣除: " ; cin>>delsalary;

        oFile<<id<<" "<<name<<" "<<salary<<" "<<fee<<" "<<bonus<<" "<<delsalary<<endl;

        }
    oFile.close();


    /*读取文件*/
    ifstream iFile;
   
    iFile.open("c:\\salary.dat",ios::in|ios::binary);

    cout<<"职工编号"<<"\t姓名"<<"\t基本工资"<<"\t奖金"<<"\t扣除"<<"\t实发工资"<<endl;
   
    while(!iFile.eof()){
   
       
        iFile>>id>>name>>salary>>fee>>bonus>>delsalary;
       
        realsalary=salary+bonus+fee-delsalary;//计算实发工资

        cout<<id<<"\t"<<name<<"\t"<<salary<<"\t"<<fee<<"\t"<<bonus<<"\t"<<delsalary<<"\t"<<realsalary<<endl;
       
        }
    iFile.close();
    }

图片附件: 游客没有浏览图片的权限,请 登录注册

   




[ 本帖最后由 万士心平 于 2011-10-11 21:34 编辑 ]
2011-10-11 21:26
naruto01
Rank: 4
等 级:业余侠客
帖 子:103
专家分:280
注 册:2011-5-23
收藏
得分:0 
 if(iFile.fail())
     break;
在while循环体中加入
2011-10-11 22:30
naruto01
Rank: 4
等 级:业余侠客
帖 子:103
专家分:280
注 册:2011-5-23
收藏
得分:0 
避免读取最后一行两次的问题
循环判断条件改为
while( iFile>>id>>name>>salary>>fee>>bonus>>delsalary )
2011-10-11 22:44
万士心平
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-1-30
收藏
得分:0 
谢谢! 请问是两个一起还是一个就可以!  我两种都试了 也是有错误啊! 希望继续帮忙! 不胜感激
2011-10-11 23:43
naruto01
Rank: 4
等 级:业余侠客
帖 子:103
专家分:280
注 册:2011-5-23
收藏
得分:0 
两种一起吧
oFile<<"职工编号"<<"\t姓名"<<"\t基本工资"<<"\t奖金"<<"\t扣除"<<endl;
考虑解决下这个吧。
如果有问题,那应该就是职工编号和姓名这了
2011-10-12 00:14
万士心平
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-1-30
收藏
得分:0 


thanks very much! 可以了!  那个oFile在上面也写进了文件,   下面读取的时候都把字符串乱赋值给其它变量了 比如bonus fee 等呵呵 非常感谢!
 
 那个为何会输出两行呢? 因为只要求写进一个 人的资料, 第一次inFile>>后      iFile.eof() 应该返回的是非0值啊 ?
 
为何循环还会再执行一次呢?  加入了您说的判断加入 iFile.fail() 成立就Break 以及用iFile>>id>>name>>salary>>fee>>bonus>>delsalary 就不会出错

只输出一行;再次谢谢回答!

出错情况图片:

  

图片附件: 游客没有浏览图片的权限,请 登录注册
2011-10-12 00:47
万士心平
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-1-30
收藏
得分:0 
而且我在循环内最后加入一行

    cout<<iFile.eof()<<endl;


输出的是0 。
2011-10-12 00:52
快速回复:请问下面的错误 输出内存不能读取 不知道哪个指针有问题
数据加载中...
 
   



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

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