手捧星光945 2022-07-26 08:37 采纳率: 85%
浏览 43
已结题

有关结构体的输入循环异常

问题遇到的现象和发生背景

educoder 头哥 结构体

```c

```本关任务:有n个学生的信息(包括学号,姓名,成绩),要求按照成绩的高低顺序输出学生的信息

问题相关代码,请勿粘贴截图

#include <stdio.h>
#include
struct Students{
long number;
char name[20];
int grade;
};
int main(){
Students stu[10];
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%l",&stu[i].number);
scanf("%s",stu[i].name);
scanf("%d",&stu[i].grade);
}
printf("666");
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
Students Stu;
if(stu[i].grade<stu[j].grade)
{
Stu=stu[i];
stu[i]=stu[j];
stu[j]=Stu;
}
}
}
for(int i=0;i<n;i++)
{
printf("%l ",stu[i].number);
printf("%s ",stu[i].name);
printf("%d\n",stu[i].grade);
}
return 0;
}

运行结果及报错内容

img

我的解答思路和尝试过的方法

似乎跟输入的n也有关系

我想要达到的结果

整出输入

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-07-26 09:27
    关注

    修改如下,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    struct Students {
        long number;
        char name[20];
        int grade;
    };
    int main() {
        Students stu[10];
        int n;
        scanf("%d", &n);
        for (int i = 0; i < n; i++){
            scanf("%ld",&stu[i].number);
            scanf("%s", stu[i].name);
            scanf("%d", &stu[i].grade);
        }
        printf("666\n");
        for (int i = 0; i < n - 1; i++) {
            for (int j = i + 1; j < n; j++){
                Students Stu;
                if (stu[i].grade < stu[j].grade)
                {
                    Stu = stu[i];
                    stu[i] = stu[j];
                    stu[j] = Stu;
                }
            }
        }
        for (int i = 0; i < n; i++) {
            printf("%ld ", stu[i].number);
            printf("%s ",  stu[i].name);
            printf("%d\n", stu[i].grade);
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月11日
  • 已采纳回答 10月3日
  • 创建了问题 7月26日