| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 491 人关注过本帖
标题:输出错误
只看楼主 加入收藏
a99875984
Rank: 2
等 级:论坛游民
帖 子:188
专家分:24
注 册:2012-2-11
结帖率:94.64%
收藏
 问题点数:0 回复次数:2 
输出错误
程序代码:
/*题目:
给年工资低于26000的教师加工作,超过的不变,
低于26000的教师按赡养的人100/人*年,加上工龄*50,,工资加后不能超过26000
*/
#include <iostream>
#include <fstream>
using namespace std;
#include "wages.h"//因为第一种算法的时候这没出错,加上了代码太长,所以没法

int comp(const void *a,const void *b)
{
    return *(double *)a-*(double *)b;
}

int main()
{
    int i=0;
    int more=0;
    int a,e,c,d;
    char b[10];
    wages teacher [10];//第一种算法:(理想运行)
    ifstream fin("教师工资表.txt");//定义ifstream类的成员变量  fin并打开文件
    cout<<"编号  姓名  旧工资  新工资  工龄  家庭人数"<<endl;
    while (!fin.eof())
    {
        cout<<""<<endl;
        fin>>a;
        fin>>b;
        fin>>c;
        fin>>d;
        fin>>e;
        teacher[i].get(a,b,c,d,e);
        if(c<26000)//工资少于26000的进行加薪计算
            teacher[i].add();//加薪计算的成员函数
        teacher[i].shownew();//输出的成员函数
        i++;
    }
    ifstream fin1("教师工资表.txt");
    cout<<"算法 二:"<<endl;//第二种算法:先按从低到高的工资顺序进行排序,对工资低于26000的人进行计算,并打印结果
    i=0;
    cout<<"编号  姓名  旧工资  新工资  工龄  家庭人数"<<endl;
    while (!fin1.eof())
    {
        fin1>>a;
        fin1>>b;
        fin1>>c;
        fin1>>d;
        fin1>>e;
        teacher[i].get(a,b,c,d,e);
        i++;
    }
    int n=i;
    int y;
    double *z;
   
    z=new double [i];
    for(int i=0;i<n;i++)
        z[i]=teacher[i].Old_wages()+i/10.00;//+i/10.0用来储存他在成员对象数组里是那个位子,如16000.i表示teacher[i]的教师旧工资为16000
    qsort(z,n,sizeof(double),comp);//将工资进行从低到高的排序
    i=0;
    while(z[i]<26000)
    {
        y=(int)z[i];
        z[i]=(z[i]-y)*10;//得到排序后的工资的顺序,比如z[i]=1,表示teacher[i]的工资是第二低的;
        i++;
    }
    while(i<n)
    {
        z[i]-=(int)z[i];
        z[i]*=10;//同上
        i++;
    }
    int j;
    for(int i=0;i<n;i++)
    {
        j=z[i];//出错地方
        cout<<z[i]<<endl;
        cout<<j<<endl;
        teacher[j].add();//数据处理
        teacher[j].shownew();//输出
    }
    system("pause");
    return 0;
}

不知道为什么,j输出的值和z[i]输出的值是不一样的,z的值分别是0,2,3,1
j的值是0 3 3 0.
TXT文本的数据是
               家庭   
               人数   
001 张三 16000 4     10
002 王五 27000 4     5
003 周二 25000 10     20
004 李四 17000 4     5

[ 本帖最后由 a99875984 于 2013-5-3 23:59 编辑 ]
搜索更多相关主题的帖子: 工资 color 
2013-05-03 23:58
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
收藏
得分:0 
变量生命域,for出了括号用全局变量,for 的条件变量改一下
2013-05-04 21:23
a99875984
Rank: 2
等 级:论坛游民
帖 子:188
专家分:24
注 册:2012-2-11
收藏
得分:0 
回复 2楼 天使梦魔
谢谢了,我已经知道哪错了
把Z数组double赋值给int  j的时候出错了,我现在觉得很奇怪的是为何吧double存储下的整型数一赋值给int 就出错了
2013-05-06 12:26
快速回复:输出错误
数据加载中...
 
   



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

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