Shoaib Ahmed
Shoaib Ahmed

Reputation: 115

GPA scores program

I am supposed to write a program where the user is asked how many students there are in a class. Then, it asks for the GPA of each of those students. In the end, it is supposed to display number of students with each GPA score. So far this is what i have, but it doesn't seem to count properly.

#include <stdio.h>

int main(void){
int cnt1, cnt2, cnt3, cnt4, student, numofsdts, GPA, GPAFreq[4];

printf("Enter number of students: ");
scanf("%d", &numofsdts);

student = 1;

while(student <= numofsdts){
    printf("GPA of student number %d: ", student);
    scanf("%d", &GPA);

    if(GPA < 1 || GPA > 4){
        printf("invalid number \n");
    }
    else{
        student++;
    }

    if(student == numofsdts + 1)
        break;


    if(GPAFreq[1])
        cnt1++;
    else if(GPAFreq[2])
        cnt2++;
    else if(GPAFreq[3])
        cnt3++;
    else if(GPAFreq[4])
        cnt4++;

}

printf("GPA 1: %d students \n", cnt1);
printf("GPA 2: %d students \n", cnt2);
printf("GPA 3: %d students \n", cnt3);
printf("GPA 4: %d students \n", cnt4);
}

Upvotes: 1

Views: 112

Answers (2)

Kirill Bulygin
Kirill Bulygin

Reputation: 3836

Set int cnt1 = 0, cnt2 = 0 etc. (they are not nullified by default, just have some garbage [like a rented room not cleaned explicitly...]).

Also:

if(GPA < 1 || GPA > 4){
    printf("invalid number \n");
    continue; // skip the rest of the loop body
}

Or a slightly cleaner approach (in full):

#include <stdio.h>

int main(void){
int cnt1 = 0, cnt2 = 0, cnt3 = 0, cnt4 = 0;
int numofsdts, GPA;

printf("Enter number of students: ");
scanf("%d", &numofsdts);

students = 0;
while(students <= numofsdts){
    printf("GPA of student number %d: ", students + 1);
    scanf("%d", &GPA);

    if(GPA < 1 || GPA > 4){
        printf("invalid number \n");
        continue;
    }

    if(GPA == 1)
        cnt1++;
    else if(GPA == 2)
        cnt2++;
    else if(GPA == 3)
        cnt3++;
    else if(GPA == 4)
        cnt4++;

    students++;
}

printf("GPA 1: %d students \n", cnt1);
printf("GPA 2: %d students \n", cnt2);
printf("GPA 3: %d students \n", cnt3);
printf("GPA 4: %d students \n", cnt4);
}

Upvotes: 3

TurnipEntropy
TurnipEntropy

Reputation: 527

There are multiple errors here. The first is that cnt1-4 have to be initialized prior to being added to. The second is that C uses zero indexing, so GPAFreq[4] is not accessing the fourth element of your array (which would be GPAFreq[3].

The third is that your if statement isn't doing what you think it is. It is evaluating the values inside of your array as boolean variables, i.e. 0 is false, anything else is true. A better approach is to do this: GPAFreq[GPA - 1] += 1; This will be counting the frequencies in each of the indices of the array. Then to print them, you just access GPAFreq and no longer need the cnt variables.

Upvotes: 1

Related Questions