Code:
float take_score (char first_names[][MAX_LETTERS],
char middle_names[][MAX_LETTERS],
char last_names[][MAX_LETTERS],
int student_num);
why not use a structure instead of passing the arrays as arguments?
Code:
char grades[MAX_STUDENTS];
char first_names [MAX_STUDENTS][MAX_LETTERS];
char middle_names [MAX_STUDENTS][MAX_LETTERS];
char last_names [MAX_STUDENTS][MAX_LETTERS];
float student_grades[MAX_STUDENTS][3];
float GPAs[MAX_STUDENTS];
float final_scores[MAX_STUDENTS];
because this is what happens. You've got this completely unweildy grouping of data that really deserves to be put in a structure.
Code:
struct name {
char first[MAX_LETTERS];
char middle[MAX_LETTERS];
char last[MAX_LETTERS];
};
struct student {
struct name name;
float grade;
char letter_grade;
//...etc.
};
// then:
struct student[MAX_STUDENTS];
parsing text can be achieved in many different ways - the most robust implementations typically set up a finite state machine of some sort, simpler ones utilize strtok, strstr, and functions like these: