C语言 结构体数组排序问题

请看代码:就是不能正常排序。。
#define N 3
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
struct item
{
char name[32];
int num;
int score;
};
struct item all[N];
int i,j;
printf("请输入%d组学生的信息:\n",N);
for(i=0;i<N;i++)
{
printf("请输入第%d组学生的姓名,学号,成绩:\n",i+1);
scanf("%s %d %d",&all[i].name,&all[i].num,&all[i].score);
}

for(i=0;i<N-1;i++)
{
for(j=i+1;i<N;j++)
{
if(strcmp(all[j].name,all[i].name)<0)
{
struct item temp;
temp=all[i];
all[i]=all[j];
all[j]=temp;
}
}
}

printf("按顺序排好的为:\n");
for(i=0;i<N;i++)
{
printf("%s %d %d\n",all[i].name,all[i].num,all[i].score);
}
return 0;
}

标准C是不支持你这种变量定义动态数组的
struct item all[N]; 这达不到你想要的效果!需要定义成指针,然后malloc
int i,j;
printf("请输入%d组信息:\n",N);

struct item *all ;
int i,j;
printf("请输入%d组信息:\n",N);
all=(struct item *)malloc(sizeof(struct item)*N ) ;
以下代码不变,文件头加上库函数头文件 #include <stdlib.h>追问

你好,运行起来还是“停止工作”啊,还是有点小问题,请问如果all是指针的话,all[i]代表什么意思,点号要不要改成->?帮忙看看其他地方还有什么错误

追答不好意思,刚才把N看成变量了,你定义的是宏,不用改这里,代码帮你调整好了,如下:
int main()
{
    struct item
    {
        char name[32];
        int num;
        int score;
    };
    struct item all[N];
    int i,j;
    printf("请输入%d组信息:\n",N);
    for(i=0;i<N;i++)
    {
        printf("请输入第%d组姓名 号 绩:\n",i+1);
        scanf("%s %d %d",all[i].name,&all[i].num,&all[i].score);//name是地址,不需要加&了
    }
    for(i=0;i<N-1;i++)
    {
        for(j=i+1;j<N;j++) //这里写成i<N了!
        {
            if(strcmp(all[j].name,all[i].name)<0)
            {
                struct item temp;
                temp=all[i];
                all[i]=all[j];
                all[j]=temp;
            }
        }
    }

    printf("result of sort:\n");
    for(i=0;i<N;i++)
    {
        printf("%s %d %d\n",all[i].name,all[i].num,all[i].score);
    }
    return 0;
}

追问

谢谢谢谢啊!!!!因为写错了个字母调了一下午,谢谢了!!!

追答

不客气,汗

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答