关于sort函数排序问题

img


怎么排序不了了这样


#include
#include
#include
using namespace std;
int N, i;
struct XUS
{
    int xh[500];
    char xm[500];
    int cj[3];
};

int main()
{
    printf("请输入共几名学生");
    scanf_s("%d", &N);
    struct XUS* x = new struct XUS[N]{};
    for (i = 0; i < N; i++)  //for (i = 1; i < N + 1; i++) 修改
    {

        printf("请输入第%d名学生的学号:", i + 1); 
        scanf("%d", x[i].xh, sizeof(x[i].xh));  

        printf("请输入第%d名学生的姓名:", i + 1); 
        scanf_s("%s", x[i].xm, sizeof(x[i].xm));  

        printf("请输入第%d名学生的成绩:", i + 1);  
        scanf_s("%d", &x[i].cj[0]);
        scanf_s("%d", &x[i].cj[1]);
        scanf_s("%d", &x[i].cj[2]);
        printf("\n");
    }
    FILE* fp;
    errno_t err;  // 修改   
    err = fopen_s(&fp, "xinxi.txt", "w"); //fopen("xinxi.txt", "w"); 
    if (err != 0) //
    {
        printf("不能打开文件\n");
        return  1;  //表示正常退出   
    }
    for (i = 0; i < N; i++)     //for (i = 1; i < N + 1; i++) 
    {
        fprintf(fp, "%s ", x[i].xh);  
        fprintf(fp, "%s ", x[i].xm);
        fprintf(fp, "%d ", x[i].cj[0]);
        fprintf(fp, "%d ", x[i].cj[1]);
        fprintf(fp, "%d ", x[i].cj[2]);
        printf("\n");
    }
    fclose(fp);
    printf("排序前\n");
    for (i = 0; i < N; i++)
    {
        printf(" %d   %s   %d   %d   %d\n", x[i].xh, x[i].xm, x[i].cj[0], x[i].cj[1], x[i].cj[2]);
    }
   
    printf("排序后\n");
    sort(x[i].xh, x[i].xh+N);
    for (i = 0; i < N; i++)
    {
       
        printf(" % s   %s   %d   %d   %d\n", x[i].xh, x[i].xm, x[i].cj[0], x[i].cj[1], x[i].cj[2]);
    }

    return 0;
}

sort是对数组和数组内的元素进行排序。函数定义:
sort(数组名,数组名+元素个数);
但你这里对程序里对sort的调用是不对的,函数的数组名处,你填写的是参数名,数组名+元素个数也不对。

sort(x[i].xh, x[i].xh+N);