使用Structure的数组排序

时间:2018-11-20 07:39:31

标签: c sorting structure

所以我想对列表进行排序,以便我可以根据他们的等级给他们排名,但是它不起作用。

它显示错误,如:从结构信息类型分配为char类型时出现不兼容的类型

p.s:我正在尝试使用“结构”进行这种排序。

#include <stdio.h>
#define SIZE 3

struct info {
    char name[20];
    int number;
    double grade;
};
int main(void) {
    struct info list[SIZE];
    int i, j;
    char temp;
    int avg;
    for (i = 0; i < SIZE; i++) {
        printf("Enter your name : ");
        scanf("%s", list[i].name);
        printf("Enter your number : ");
        scanf("%d", & list[i].number);
        printf("Enter your grade : ");
        scanf("%lf", & list[i].grade);
    }
    for (i = 0; i < SIZE; i++) {
        printf("Name : %s  Student Number : %d  Grade : %f", list[i].name,
            list[i].number, list[i].grade);
        printf("\n");
    }
    for (i = 0; i < SIZE; i++) {
        for (j = i + 1; j < SIZE; j++) {
            if (list[j].grade > list[i].grade) {
                temp = list[j];
                list[j] = list[i];
                list[i] = temp;
            }
        }
    }
    for (i = 0; i < SIZE; i++) {
        printf("%d st Position : Name : %s  Student Number : %d  Grade :  %f ",i, 
            list[i].name, list[i].number, list[i].grade);
        printf("\n");
    }
    avg = 0;
    for (i = 0; i < SIZE; i++)
        avg += list[i].grade;
    avg = avg / 3;
    printf("Average is %d", avg);
    getch();
    return 0;
}

错误在以下代码中:

for(i=0;i<SIZE;i++) {
    for(j=i+1;j<SIZE;j++) {
        if(list[j].grade>list[i].grade) {
            temp=list[j];
            list[j]=list[i];
            list[i]=temp;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您为类型char分配了名称temp,并尝试为其分配struct。而是创建一个struct temp,然后对结构数组进行排序。

#include <stdio.h>
#define SIZE 3

struct info { // use typedef struct info instead
    char name[20];
    int number;
    double grade;
};
int main(void) {
    struct info list[SIZE]; // allows you to write info list[size]
    int i, j; // do not initialize loop variables outside of their loops unless you need to(makes it easier to read the loop statements/spot mistakes)
    char temp; // you need to use a type info, not char e.g. info temp

我目前无法自己编译它,因此,如果您还有其他问题,请在评论中告知我们。