I am trying to calculate the grades for the following students and I can't figure what I am doing wrong. The students grades will read from a disk but if the grade is over 100 or <0 it should ommit the grades from the class average. The program also list the students who have incorrect grades.
// File: Pr_2.c
// Date: 12/05/01
// Purpose: Print the students first,last,and id number.
//Read students three test scores from a file and compute the average.
//The average will then be converted to a letter grade which will
//Print out on the screen both numerical and charater grade.
//Then compute the class average only for students who's average is less than or equal to 100
//The program will also list the students as well as their grades who got over a 100
#include <stdio.h>
#include <string.h>
int main ()
{
// declare the variables for program
char firstname [20] = "";
char lastname [20] = "";
char fullname [40] = "";
char grad(float);
int test1,test2,test3,IDnum;
int students; //file name
int invalid;
int k;
int valid(int,int,int);
float average;
float averageclass,sum;
FILE * datafile;
datafile = fopen("D:\\students.txt","r");
//Read from file
if(datafile==NULL)
{
printf("could not open data file requested\n");
return 0;
}//end of if statement
sum=0;
fscanf(datafile,"%d",&students);
for (k=1;k<=students;k++)
{
fscanf(datafile,"%s",firstname);
fscanf(datafile,"%s",lastname);
fscanf(datafile,"%s",&IDnum);
fscanf(datafile,"%s",&test1);
fscanf(datafile,"%s",&test2);
fscanf(datafile,"%s",&test3);
strcpy(fullname,lastname);
strcat(fullname,", ");
strcat(fullname, firstname);
if (valid (test1,test2,test3))
{ //begins if statement
average=(test1,test2,test3)/3.0; //calculates students average
sum=sum+average;
printf("%s\t%d",fullname,IDnum);
printf("\t%d\t%d\t%d",test1,test2,test3);
printf("\t%.2f\t%c\t\n",average,grad(average));
} //end if
else
{
invalid++;
printf("%s\t%d",fullname,IDnum);
printf("\tInvalid data\n\n");
students=students-1;
}
}//end of loop
fclose(datafile);
averageclass=(sum/(students-invalid));
printf("/n/nThe class average calculated is:");
printf("%.2f\n\n",averageclass);
} //end of main function
int valid (int test1,int test2,int test3) //valid function called
{
int good;
return((test1>=0)&&(test1<=100)&&(test2>=0)&&(test 2<=100)&&(test3>=0)&&(test3<=100));
}//end of valid function
char grad(float average) //grade function is called
{
char grade;
//converts numeric grade to letter grade
if (average<=60)grade='F';
if (average>=60&&average<70)grade='D';
if (average>=70&&average<80)grade='C';
if (average>=80&&average<90)grade='B';
if (average>=90&&average<100)grade='A';
return (grade);
}