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 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
  • ¥30 ppOCRLabel导出识别结果失败
  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿