Попытка отобразить данные студента из файла в соответствии с отсортированным идентификатором студента - PullRequest
0 голосов
/ 13 апреля 2019

Я не могу отсортировать данные, которые я извлекаю из файла, я хочу, чтобы они печатались на консоли в порядке возрастания идентификатора, я не могу преобразовать идентификатор символа в целочисленный идентификатор для сравнения

struct student{
    char ID[15];
    char name[20];
    char add[20];
    char parname[20];
    int Class;
    float gpa;
    long unsigned int phone_no;
};
void sort_accord_id()
{
    while(fread(&stu,sizeof(stu),1,fp))
{
    strcpy(s[count].ID,stu.ID);
    strcpy(s[count].name,stu.name);
    printf("ID:%s\n", stu.ID);

    printf("\t%s",s[count].ID);
    printf("\t%s",s[count].name);
    count++;
}



for(i=0;i<=count-1;i++)
{
    for(j=0;j<=count-1;j++)
    {
        if(s[j].ID-'0'<s[j+1].ID-'0')
        {
            temp=s[j];
            s[j]=s[j+1];
            s[j+1]=temp;
        }
    }
}    
}

1 Ответ

1 голос
/ 13 апреля 2019

Если он правильно читает (что я предполагаю) студенческой структуре 'object' stu, один из подходов состоит в том, чтобы сохранить их все в массиве (лучше всего динамически размещать в куче, иначе простодостаточно большой, чтобы держать их всех [осторожно с этим!]), а затем отсортировать их по stdlib.h 'qsort().

Я могу предложить помощь по динамическим массивам, если вы хотите, но я уверен, что некоторое прибегание к помощи также сделало бы уловку.

Если бы у вас был массив структур учеников (которые я также предлагаю вам ввести typedef), но для ясности этого ответа я не буду называть arr, вы можете отсортировать их следующим образом:

  • Первый #include <stdlib.h> вверху файла
  • Затем следующая функция для сравнения их идентификаторов с strcmp:

    int student_cmp(const void* a, const void* b)
    {
        struct student* studentA = (struct student*)a;
        struct student* studentB = (struct student*)b;
    
        return strcmp(studentA->ID, studentB->ID);
    }
    
  • И, наконец, вы можете вызвать qsort в вашем sort_accord_id() следующим образом:

    qsort(arr, 2, sizeof(struct student), student_cmp);

Дайте мне знать, если у вас есть другие вопросы.И добро пожаловать в Stack Overflow!

...