Я работаю над заданием, которое должно считывать информацию о сотруднике из текстового файла и вычислять такие вещи, как валовая заработная плата и сумма, подлежащая уплате в виде налога.Но я не могу выполнить бит вычисления w, потому что одна из моих переменных «часы» изменяется после того, как я выхожу из цикла, который читает из файла.
Я не уверен, почему я могу печатать правильные значения внутри, но невне цикла.
Я читаю фамилию, имя, выплату и часы, полученные из файла ниже:
Whittle Ed 11.50 25.50
Davidson Carl 8.75 38.00
Doe John 17.00 46.50
Marion Louise 13.00 40.00
Prentiss Paula 15.75 50.50
Вот мой прогресс:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXEMPLOYEES 5
#define TAXRATE .15
/************************************************************
Program Decomposition
1.0
1.1 InputData(in lastName, firstName as string, in hours, payrate, as real)
1.2 CalculatePay()
1.2.1 CalculateOvertime(in hours, out regularHours, out otHours)
1.2.2 CalculateGross()
1.2.3 CalculateTax()
1.2.4 CalculateNet()
*************************************************************/
/************************************************************
Function Prototypes
************************************************************/
void InputData(FILE * reportFile, char * lastName, char * firstName, float *hours, float *payrate);
void CalculateOvertime(float hours, float * regularHours, float * otHours);
/************************************************************
Record of employee information
***********************************************************/
typedef struct empRecord{
char fullName[20];
char lastName[8+1];
char firstName[8+1];
float tax, net;
float payrate, hours, regularHours, otHours, gross;
}empRecord;
int main(void){
FILE * reportFile;
empRecord emp[MAXEMPLOYEES];
int employeeCount = 0;
reportFile = fopen("report.txt","r");
if (reportFile == NULL)
{
printf("File failed to open!...\n");
printf("Press a key to exit...\n");
while (getchar() != '\n');
exit (86);
}
/*********************************************************
Input Loop
*********************************************************/
for(int i = 0; i < MAXEMPLOYEES; i++){
InputData(reportFile, emp[i].lastName, emp[i].firstName, &emp[i].hours, &emp[i].payrate);
// Checking for correct inputs
printf("%s, %s, %.2f, %.2f\n",emp[i].lastName, emp[i].firstName, emp[i].hours, emp[i].payrate);
employeeCount++;
}
// Checking for input
for(int i = 0; i < MAXEMPLOYEES; i++){
printf("%f\n",emp[i].hours);
}
/**********************************************************
Processing Loop
**********************************************************/
for(int i = 0; i < MAXEMPLOYEES; i++){
CalculateOvertime(emp[i].hours, &emp[i].regularHours, &emp[i].otHours);
}
return 0;
}
/********************************************
1.1 InputData(in lastName, firstName as string, in hours, payrate, as real)
This function reads inputs from the file and inputs that data into the Array of Records.
**********************************************/
void InputData(FILE * reportFile, char * lastName, char * firstName, float *hours, float *payrate){
printf(" Reading new employee data...\n");
fscanf(reportFile, "%s", lastName);
fscanf(reportFile, "%s", firstName);
fscanf(reportFile, "%f", hours);
fscanf(reportFile, "%f", payrate);
}
void CalculateOvertime(float hours, float * regularHours, float * otHours){
printf(" Hours are : ", "%f", hours);
if (hours > 40)
{
*regularHours = 40;
*otHours = (hours - 40);
}
else
{
*regularHours = hours;
*otHours = 0;
}
}
Я довольно новичок в программировании и чувствую, что это простое исправление, но я не смог понять, что случилось.Любая помощь будет принята с благодарностью.
Спасибо.