0

This question may be annoying, but I am trying to write code the way that I can most easily mentally process it and at this point it is without calling functions. I am rewriting my professors example code into my own, but am having a problem with what to store it into? He uses a pointer, but I just don't know how/where to declare it.

My apologies if this question is incorrectly worded. I am one of those people who just doesn't 'get it' when it comes to programming unfortunately.

My Professors:

#include <stdio.h>
#include <stdlib.h>

/* Program that computes the average salary of the employees with an age equal or greater
than x, x is passed as a parameter to the main function. Employee is a structure with two 
fields: age and salary. */

struct employee {
   int age;
   float salary;
};

void readValues(struct employee *EMP, int n ) {
    int i;

    for(i=0; i<n; i++) {
        printf("Employee %i\n", i+1);
        printf("\tAge: ");
        scanf("%i", &EMP[i].age);
        printf("\tSalary: ");
        scanf("%f", &EMP[i].salary);
    }
}

float getAvg(struct employee *EMP, int minAge, int n ) {
    int i, nE = 0;
    float sum=0;

    for(i=0; i<n; i++) {
        if(EMP[i].age >= minAge) {
            sum = sum + EMP[i].salary;
            nE = nE + 1;
        }
    }   
    return sum/nE;
}

int main(int argc, char *argv[]) {
    int x, n;
    struct employee E[100]; 

    if (argc<3) {
        printf("Error: Some parameters missing.\n");
        return -1;
    }
    x = atoi(argv[1]);
    n = atoi(argv[2]);

    readValues(E, n);
    float avg = getAvg(E, x, n);
    printf("Avg. Salary = %.2f\n", avg);

     return 0;
}

My attempt:

#include <stdio.h>
#include <stdlib.h>

#define minage 20

 struct employee{
    int age;
    float salary;
    };

int main()

{
    struct employee emp = {0};

    int i, n, numb=0, sum=0, avg;

    printf("How many employees do you have today?\n");
    scanf("%i", n);

    for(i=0; i<n; i++)
    {
        printf("Employee %i", i+1);
        printf("Age:\n");
        scanf("%i", &emp[i].age);
        printf("Salary:\n");
        scanf("%f", &emp[i].salary);
    }

    if (emp[i].age >= minage)
    {
        for(i=0, i<n; i++){
            sum = sum + emp[i].salary
            numb = numb + 1

        }
    }
    avg = sum / numb;

    printf("The average salary is %i\n", avg);

}
Casey
  • 67
  • 1
  • 6

1 Answers1

1

Refer the below Code: Comments Inline

#include <stdio.h>
#include <stdlib.h>

#define minage 20

struct employee{
    int age;
    float salary;
};

int main()
{
    /* Use array of struct to store the employee record. */
    struct employee emp[100];
    int i, n, numb=0, sum=0;
    float avg = 0;       /* If avg is of type int then you will loose the precision when finding the average */

    printf("How many employees do you have today?\n");
    scanf("%i",&n); /* Use `&` when using scanf to read value into integer*/

    for (i = 0; i < n; i++) {  
        printf("Employee %i", i+1);
        printf("Age:\n");
        scanf("%i", &emp[i].age);
        printf("Salary:\n");
        scanf("%f", &emp[i].salary);
    }

    /* Your professor is calculating avg salary only if age >= minage.
     * But in your code your are trying to check if the last employee age is 
     * >= minage only after which calculating the avg salary of all employee's*/
    for (i = 0; i < n; i++) {
        if (emp[i].age >= minage) {  
            sum = sum + emp[i].salary;
            numb = numb + 1;
        }
    }

    /* Make sure to check whether numb != 0, else divide by zero exception
     * when there are no employee's with age greater than 20 (minage) */
    if (numb)
        avg = sum / numb;

    printf("The average salary is %.2f\n", avg);
    /* return 0; when return type of main() is int.
     * If not required then change to void main()*/
    return 0;
}

Also as your professor is initializing minage from user input. In your code it is hard coded to a fixed number 20.

Try to read the minage from user as you did to get the number of employee's.

Santosh A
  • 5,173
  • 27
  • 37