Netpay Sort Using Pointers - Compiles but Stops Working

For my programming midterm, I need to sort employee salaries (netpay) using pointers. I've completed a code that *finally* compiles but when I run it it posts the netpays in their original order, then when I press enter (or enter something) the program just stops working. I also had to do this without using pointers, and that program works, so I just swapped that out.

I'm a newbie and I must admit I'm not doing great so it's probably something small I've missed.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#include <iostream>
#include<fstream>
#include<iomanip>
using namespace std; 

//function prototypes
int readalldata(long int[], int[], float[], const int);
void findovertimehours(int[], int[], int);
void findovertimepay(int[], float[], float[], int);
void findregularhours(int[], int[], int);
void findregularpay(int[], float[], float[], int);
void findgrosspay(float[], float[], float[], int);
void findtaxrate(float[], float[], int);
void findtaxamount(float[], float[], float[], int);
void findnetpay(float[], float[], float[], int);
void printdata(float[], int);
int sortdata(float[], int);

int main(){
     const int MAXSIZE=100;   //for maximum of 100 employees
     
    //declaration of variables
     int n;
     long int id[MAXSIZE];
     int hoursworked[MAXSIZE], overtimehours[MAXSIZE];
     int regularhours[MAXSIZE];
     float hourlyrate[MAXSIZE], regularpay[MAXSIZE],
     overtimepay[MAXSIZE], grosspay[MAXSIZE];
     float taxrate[MAXSIZE], taxamount[MAXSIZE], netpay[MAXSIZE];
     
    //function calls
     n=readalldata(id, hoursworked, hourlyrate, MAXSIZE); //get all data
     findovertimehours(hoursworked, overtimehours, n);
     findovertimepay(overtimehours, hourlyrate, overtimepay, n);
     findregularhours(hoursworked, regularhours, n);
     findregularpay(regularhours, regularpay, hourlyrate, n);
     findgrosspay(regularpay, overtimepay, grosspay, n);
     findtaxrate(grosspay, taxrate, n);
     findtaxamount(grosspay, taxamount, taxrate, n);
     findnetpay(grosspay, netpay, taxamount, n);
     printdata(netpay, n);
     sortdata(netpay, n);
return 0;
}//MAIN

//function definitions
int readalldata(long int id[], int hoursworked[], float hourlyrate[], int n){
    ifstream fin("employees.txt");
    n=0;
    
    while(fin>>id[n]>>hoursworked[n]>>hourlyrate[n]) n++;
    fin.close();
    return n;
}//READALLDATA

void findovertimehours(int hoursworked[], int overtimehours[], int n){
     for(int i=0; i<n; i++){
             if(hoursworked[i]>40) overtimehours[i]=hoursworked[i]-40;
             else overtimehours[i]=0;
     }//FOR
}//FINDOVERTIMEHOURS

void findovertimepay(int overtimehours[], float hourlyrate[],
     float overtimepay[], int n){
     for(int i=0; i<n; i++){
             overtimepay[i]=overtimehours[i]*hourlyrate[i]*1.5;
     }//FOR
}//FINDOVERTIMEPAY

void findregularhours(int hoursworked[], int regularhours[], int n){
     for(int i=0; i<n; i++){
             if(hoursworked[i]>40) regularhours[i]=40;
             else regularhours[i]=hoursworked[i];
     }//FOR
}//FINDREGULARHOURS

void findregularpay(int regularhours[], float regularpay[],
                        float hourlyrate[], int n){
      for(int i=0; i<n; i++){
      regularpay[i] = regularhours[i]*hourlyrate[i];
      }//FOR
}//FINDREGULARPAY
void findgrosspay(float regularpay[], float overtimepay[],
                        float grosspay[], int n){
                        for(int i=0; i<n; i++){
                        grosspay[i]=regularpay[i]+overtimepay[i];
        }//FOR
}//FINDGROSSPAY

void findtaxrate(float grosspay[], float taxrate[], int n){
     for(int i=0; i<n; i++){
             if(grosspay[i]>4000.00) taxrate[i]=0.40;
             else if(grosspay[i]>3000.00) taxrate[i]=0.30;
             else if(grosspay[i]>1000.00) taxrate[i]=0.20;
             else taxrate[i]=0.10;
     }//FOR
}//FINDTAXRATE

void findtaxamount(float grosspay[], float taxamount[],
                         float taxrate[], int n){
for(int i=0; i<n; i++){
        taxamount[i]=grosspay[i]*taxrate[i];
        }//FOR
}//FINDTAXAMOUNT

void findnetpay(float grosspay[], float netpay[], float taxamount[], int n){
     for(int i=0; i<n; i++){
          netpay[i]=grosspay[i]-taxamount[i];
     }//FOR
}//FINDNETPAY

void printdata(float netpay[], int n){
                       float totalNetPay=0;
                       
                       int i=0;
                       cout<<"NETPAY"<<endl;
           
for(i; i<n; i++){
       totalNetPay +=netpay[i];
        cout<<netpay[i]<<endl;
        }//FOR
	cin.get();
}//printdata

int sortdata(float netpay[], int n){
            float *p[n];
            string *f[n];
            string *l[n];

          float *temp;
          string *ftemp;
            string *ltemp;

            int sortedflag=0;
            int i, j;
            for(i=0;i<n;i++){
           p[i]=netpay+i;

            while(!sortedflag){
                    sortedflag=1;
                    for(j=0;j<n-1;j++){
                     if(*p[j]>*p[j+1]){
                       temp=p[j];
                       ftemp=f[j];
                       ltemp=l[j];

                       p[j]=p[j+1];
                       f[j]=f[j+1];
                       l[j]=l[j+1];

                       p[j+1]=temp;
                       f[j+1]=ftemp;
                       l[j+1]=ltemp;
                       sortedflag=0;}//SWAP
                       }//J
                       }//I

           cout<<endl<<"SORTED ARRAY: "<<endl;

           for(int i=0; i<n; i++){//loop for display
          cout<<setw(11)<<setprecision(1)<<setiosflags(ios::showpoint|ios::fixed|ios::left)
          <<*f[i]<<setw(11)<<*l[i]<<*p[i]<<endl;
            cout << ""<<endl; }
                   }}//sortdata 
//end source code  
Looks to me like you have a misplaced brace in sortdata():
1
2
3
4
5
6
           . . .
            for(i=0;i<n;i++){
           p[i]=netpay+i;

            while(!sortedflag){
           . . .




Edit: left out a preposition
Last edited on
Topic archived. No new replies allowed.