0
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define ARRAY_MAX 100
#define FNAME 31
#define LNAME 31
typedef int (*compfn)(const void*, const void*);
struct student {
char firstName[FNAME];
char lastName[LNAME];
int quiz1, quiz2 , quiz3, quiz4, mid1, mid2, final;
char letterGrade;
int finalGradePercentage;
};
// Function for Qsort
int compare(struct student *element1, struct student *element2)
{
if (element1->firstName[0] < element2->firstName[0])
return -1;
else if (element1->firstName[0] > element2->firstName[0])
return 1;
else
return 0;
}
int main(int argc, char *argv[]){
FILE *inputFile, *outputFile;
char buf[100];
char *token;
int count = 0;
inputFile = fopen("/Users/Home/Desktop/input_data.txt", "r");
struct student studentData[ARRAY_MAX];
while (fgets(buf, sizeof(buf), inputFile) != NULL){ //scan through the input file
token = strtok(buf, " ");
strcpy(studentData[count].firstName, token);
token = strtok(NULL, ",");
strcpy(studentData[count].lastName, token);
token = strtok(NULL, ",");
studentData[count].quiz1 = atoi(token);
token = strtok(NULL, ",");
studentData[count].quiz2 = atoi(token);
token = strtok(NULL, ",");
studentData[count].quiz3 = atoi(token);
token = strtok(NULL, ",");
studentData[count].quiz4 = atoi(token);
token = strtok(NULL, ",");
studentData[count].mid1 = atoi(token);
token = strtok(NULL, ",");
studentData[count].mid2 = atoi(token);
token = strtok(NULL, ",");
studentData[count].final= atoi(token);
studentData[count].finalGradePercentage = studentData[count].quiz1 * .10 +studentData[count].quiz2 * .10 + studentData[count].quiz3 * .10 + studentData[count].quiz4 * .10 + studentData[count].mid1 * .20 + studentData[count].mid2 * .15 + studentData[count].final * .25;
if (studentData[count].finalGradePercentage <=100 && studentData[count].finalGradePercentage>=90)
{
studentData[count].letterGrade = 'A';
}
else if(studentData[count].finalGradePercentage <= 89 && studentData[count].finalGradePercentage >=80)
{
studentData[count].letterGrade = 'B';
}
else if(studentData[count].finalGradePercentage <= 79 && studentData[count].finalGradePercentage >=70)
{
studentData[count].letterGrade = 'C';
}
else if(studentData[count].finalGradePercentage <= 69 && studentData[count].finalGradePercentage >=60)
{
studentData[count].letterGrade = 'D';
}
else if(studentData[count].finalGradePercentage <= 59){
studentData[count].letterGrade = 'F';
}
count++;
}
qsort((void *) &studentData,count,sizeof(struct student),(compfn)compare);
for (int i = 0; i< count; i++) {
char name[62];
sprintf(name, "%s %s", studentData[i].firstName, studentData[i].lastName);
printf("%-20s %c\n", name, studentData[i].letterGrade);
}
fclose(inputFile);
fclose(outputFile);
return 0;
}
嗨,夥計 我很難讓我的結構以字母順序排列。任何幫助這樣做將不勝感激。這是我迄今爲止所擁有的。我認爲問題在於比較功能。但我不確定我真的很瞭解你。任何人都知道一些很好的參考資料來閱讀它。用qsort按字母順序組織一個結構