输出错误
程序代码:
/*题目: 给年工资低于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 编辑 ]