zzk.213 2021-11-19 12:38 采纳率: 87.8%
浏览 24
已结题

要求是按照英文名字首字母排序,输出名字成绩和专业,我写的哪里有问题

#include <stdio.h>
#include <string.h>
typedef struct
{
char name[15];
int grade;
char major[15];
}studentRecord;
int main()
{
int m,i,j;
setvbuf(stdout,NULL,_IONBF,0);
printf("Please input the number of students(<=50):");
start:
scanf("%d",&m);
studentRecord student[m];
if(m<=50)
{
printf("Please input students'information:\n");
for(i=0;i<m;i++)
{
scanf("%s %d %s\n",student[m].name,&student[m].grade,student[m].major);
}
for(i=0;i<m-1;i++)
{
for(j=i+1;j<m;j++)
{
if(strcmp(student[i].name,student[j].name)>0)
{
char temp;
strcpy(temp,student[i].name);
strcpy(student[i].name,student[j].name);
strcpy(temp,student[j].name);

            }
        }

    }
    for(i=0;i<m;i++)
    {
        printf("%s %d %s",student[i].name,student[i].grade,student[i].major);
    }

}
else
{
    printf("Warning:Please input a number which does not exceed 50.\n");
    printf("Input again:");
    goto start;
}
  • 写回答

1条回答 默认 最新

  • qzjhjxj 2021-11-22 09:19
    关注

    修改如下,供参考:

    #include <stdio.h>
    #include <string.h>
    #define N 50              //修改
    typedef struct studentRec //修改
    {
        char name[15];
        int  grade;
        char major[15];
    }studentRecord;
    int main()
    {
        int m, i, j;
        studentRecord student[N] = { 0 };  //修改
        setvbuf(stdout, NULL, _IONBF, 0);
        printf("Please input the number of students(<=50):");
    start:
        scanf("%d", &m);
        if (m <= 50)
        {
            printf("Please input students'information:\n");
            for (i = 0; i < m; i++)
            {
                scanf("%s %d %s", student[i].name, &student[i].grade, student[i].major); //修改
                //scanf("%s %d %s\n", student[m].name, &student[m].grade, student[m].major);
            }
            for (i = 0; i < m - 1; i++)
            {
                for (j = i + 1; j < m; j++)
                {
                    if (strcmp(student[i].name, student[j].name) > 0)
                    {
                        studentRecord temp;  //修改
                        temp = student[i];   //修改
                        student[i] = student[j];//修改
                        student[j] = temp;    //修改
                    }
                }
    
            }
            for (i = 0; i < m; i++)
            {
                printf("%s %d %s\n", student[i].name, student[i].grade, student[i].major);
            }
    
        }
        else
        {
            printf("Warning:Please input a number which does not exceed 50.\n");
            printf("Input again:");
            goto start;
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月30日
  • 已采纳回答 11月22日
  • 创建了问题 11月19日

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题