Hello there everyone. I am having a bit of trouble with my C programming. I do not know anything about C programming and this is my first semester and already my professor is putting pressure on me. Anyone that can help would be appreciated.

So I am supposed to create a program that reads from a file with the numbers:
98 96 14 95 88 64 37 72 78 120 86 73 84 73 104 66 92 19 63 45

After that I am supposed to calculate all the grades for each one like A, A+, A-, B, B+, B- C, C+, C-, D, D+, D-, F, all invalid grades less than 21 and more than 100 are considered invalid

So at the end of my code it should print out:
The number of B grades is: 3
The numerical average for a B grade is : 86
The number of B+ grades is: 2
The number of B- grades is: 1

So I am having trouble on how to read all the A grades and do average, all the B grades and do average, and so on. My professor didn't teach us that yet, so I am very confused. Its easy with scanf, but from the file, I don't know. If anyone could help would be so glad. Thanks in advance.

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

int main()
{
int countA = 0;

int countB = 0;

int countC = 0;

int countD = 0;

int countF = 0;

int invalidcount = 0;

int numA = 0;

FILE* infile;

infile = fopen("lab2_data.txt", "r");

while(!feof (infile) )
{
fscanf(infile, "%d", &numA);
{
if (numA > 100)
{
printf("The number grade %d is invalid\n", numA);
invalidcount = invalidcount + 1;
}

else if (numA >= 96)
{
printf("The number grade %d is a A\n", numA);
countA = countA + 1;

}

else if (numA >= 91)
{
printf("The number grade %d is a A\n", numA);
countA = countA + 1;
}

else if (numA >= 86)
{
printf("The number grade %d is a B\n", numA);
countB = countB + 1;
}

else if (numA >= 81)
{
printf("The number grade %d is a B\n", numA);
countB = countB + 1;
}

else if (numA >= 76)
{
printf("The number grade %d is a C\n", numA);
countC = countC + 1;
}

else if (numA >= 71)
{
printf("The number grade %d is a C\n", numA);
countC = countC + 1;
}

else if (numA >= 66)
{
printf("The number grade %d is a D\n", numA);
countD = countD + 1;
}

else if (numA >= 61)
{
printf("The number grade %d is a D\n", numA);
countD = countD + 1;
}

else if (numA >= 21)
{
printf("The number grade %d is a F\n", numA);
countF = countF + 1;
}

else if (numA < 21)
{
printf("The number grade %d is invalid\n", numA);
invalidcount = invalidcount + 1;
}
}
}

printf("\nThe number of A grades is: %d\n", countA);

printf("\nThe number of B grades is: %d\n", countB);

printf("\nThe number of C grades is: %d\n", countC);

printf("\nThe number of D grades is: %d\n", countD);

printf("\nThe number of F grades is: %d\n", countF);

printf("\nThe number of invalid grades is: %d\n", invalidcount);
fclose(infile);

return(0);
}``````

## All 5 Replies

You just missed the code-tag on your post :)

OK, what you could do is add another variable to each of the grade groups that you have (A, B, C etc) that would store the average as you go along. So every time you add one to count, update the average as well.

A normal way to handle this kind of thing would be with structures and/or arrays, but you might not have come to those in your course yet.

Thanks for the reply. But I am still confused. I know that I have to have an int average, but like lets say the two numbers 88 and 86 are being read from the file, how do I tell the program that to save these numbers and that they are letter B grades. Could you like explain the concept to me on how this works.

So do I have like

averageA = averageA + numA
averageB = averageB + numA
averageC = averageC + numA

Before you concern yourself with averages I would get your while loop working, as it is you read the last grade twice.

Try changing your loop condition to something like...

``while( fscanf(infile, "%d", &numA) != EOF)``

Well, you already have a bunch of `if... else` statements that count up the number of each grade. If you take one of them, say

``````else if (numA >= 91){
printf("The number grade %d is a A\n", numA);
countA = countA + 1;
}``````

and change it to

``````else if (numA >= 91){
printf("The number grade %d is a A\n", numA);
countA = countA + 1;
averageA += numA;    // update average here
}``````

Then after you've processed all the grades, you just need something like

``averageA /= countA;``

and you're done. Does that make sense?

Thank you very much everyone especiall ravenous. I was doing
averageA = averageA / numA. I dont know what I was thinking. I felt soo stupid. But ravenous, after you showed me that averageA = averageA / countA; I was like dang, that was so silly of me. But I am very thankful. Here is my final code

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

int main()
{
int countA = 0;
int totalA = 0;
int averageA = 0;

int countB = 0;
int totalB = 0;
int averageB = 0;

int countC = 0;
int totalC = 0;
int averageC = 0;

int countD = 0;
int totalD = 0;
int averageD = 0;

int countF = 0;
int totalF = 0;
int averageF = 0;

int invalidcount = 0;

int numA = 0;

FILE* infile;

infile = fopen("lab2_data.txt", "r");

while(!feof (infile) )
{
fscanf(infile, "%d", &numA);
{
if (numA > 100)
{
printf("The number grade %d is invalid\n", numA);
invalidcount = invalidcount + 1;
}

else if (numA >= 96)
{
printf("The number grade %d is a A\n", numA);
countA = countA + 1;
totalA = totalA + numA;
}

else if (numA >= 91)
{
printf("The number grade %d is a A\n", numA);
countA = countA + 1;
totalA = totalA + numA;
}

else if (numA >= 86)
{
printf("The number grade %d is a B\n", numA);
countB = countB + 1;
totalB = totalB + numA;
}

else if (numA >= 81)
{
printf("The number grade %d is a B\n", numA);
countB = countB + 1;
totalB = totalB + numA;
}

else if (numA >= 76)
{
printf("The number grade %d is a C\n", numA);
countC = countC + 1;
totalC = totalC + numA;
}

else if (numA >= 71)
{
printf("The number grade %d is a C\n", numA);
countC = countC + 1;
totalC = totalC + numA;
}

else if (numA >= 66)
{
printf("The number grade %d is a D\n", numA);
countD = countD + 1;
totalD = totalD + numA;
}

else if (numA >= 61)
{
printf("The number grade %d is a D\n", numA);
countD = countD + 1;
totalD = totalD + numA;
}

else if (numA >= 21)
{
printf("The number grade %d is a F\n", numA);
countF = countF + 1;
totalF = totalF + numA;
}

else if (numA < 21)
{
printf("The number grade %d is invalid\n", numA);
invalidcount = invalidcount + 1;
}
}
}

averageA = totalA / countA;
averageB = totalB / countB;
averageC = totalC / countC;
averageD = totalD / countD;
averageF = totalF / countF;

printf("\nThe number of A grades is: %d\n", countA);
printf("The numerical average for a A grade is: %d\n", averageA);

printf("\nThe number of B grades is: %d\n", countB);
printf("The numerical average for a B grade is: %d\n", averageB);

printf("\nThe number of C grades is: %d\n", countC);
printf("The numerical average for a C grade is: %d\n", averageC);

printf("\nThe number of D grades is: %d\n", countD);
printf("The numerical average for a D grade is: %d\n", averageD);