HPPIY 2022-01-06 14:44 采纳率: 80%
浏览 44
已结题

c语言程序,建立函数调用失败。

题目:
建立学生信息档案,自建input(数据录入)和sort(数据排序)函数完成数据处理。
遇到的问题:
自建函数调用失败直接跳过了,原因不明。

# include<malloc.h>
# include<stdio.h>


struct Student
{
    int age;
    char name[100];
    float score;
};


void sort(int * lon, struct Student ** s)
{
    int i;
    int j;
    struct Student t;

    lon = (int *)malloc((*lon) * sizeof(struct Student));
    * s = (struct Student *)malloc((*lon)* sizeof(struct Student));    
    
    for(i=0; i<(*lon)-1; ++i)
        for(j=0; j<(*lon)-1-i; ++j)
            if((*s)[j].score < (*s)[j+1].score)
            {
                t = (*s)[j];
                (*s)[j] = (*s)[j+1];
                (*s)[j+1] = t;
            }
}


void Input(int *len, struct Student ** p)
{
    int i;
    len = (int *)malloc((*len) * sizeof(struct Student));
    * p = (struct Student *)malloc((*len) * sizeof(struct Student));        

    for(i=0; i<(*len); ++i)
    {
        printf("请输入第%d名学生信息\n", i+1);
        printf("name = ");
        scanf("%s", (*p)[i].name);
        printf("age = ");
        scanf("%d", &(*p)[i].age);
        printf("score = ");
        scanf("%f", &(*p)[i].score);    
    }
    return;
}


int main(void)
{
    int len;
    int i;
    struct Student * q;
    
    printf("请输入学生人数:\n");
    printf("len = ");
    scanf("%d", &len);

    Input (&len, &q);
    sort (&len, &q);

    for( i=0; i<len; ++i)
    {
        printf("第%d名学生的信息", i+1);
        printf("name = %s\n", q[i].name);
        printf("age = %d\n", q[i].age);
        printf("score = %f\n", q[i].score);
    }
    return 0;    
}


以下是执行结果:

请输入学生人数:
len = 3 (仅“3”为手动输入。)
第1名学生的信息Press any key to continue

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2022-01-06 14:46
    关注

    修改如下 :

    # include<malloc.h>
    # include<stdio.h>
     
    struct Student
    {
        int age;
        char name[100];
        float score;
    };
     
    void sort(int len, struct Student ** s)
    {
        int i;
        int j;
        struct Student t;  
        for(i=0; i<len-1; ++i)
            for(j=0; j<len-1-i; ++j)
                if((*s)[j].score < (*s)[j+1].score)
                {
                    t = (*s)[j];
                    (*s)[j] = (*s)[j+1];
                    (*s)[j+1] = t;
                }
    }
     
    void Input(int len, struct Student ** p)
    {
        int i;    
        *p = (struct Student*)malloc(len * sizeof(struct Student)); 
        for(i=0; i<len; ++i)
        {
            printf("请输入第%d名学生信息\n", i+1);
            printf("name = ");
            scanf("%s", (*p)[i].name);
            printf("age = ");
            scanf("%d", &(*p)[i].age);
            printf("score = ");
            scanf("%f", &(*p)[i].score);    
        }
        return;
    }
     
    int main(void)
    {
        int len;
        int i;
        struct Student * q = NULL;
        printf("请输入学生人数:\n");
        printf("len = ");
        scanf("%d", &len);
        Input (len, &q);
        sort (len, &q);
        for( i=0; i<len; ++i)
        {
            printf("第%d名学生的信息", i+1);
            printf("name = %s\n", q[i].name);
            printf("age = %d\n", q[i].age);
            printf("score = %f\n", q[i].score);
        }
        return 0;    
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 1月14日
  • 已采纳回答 1月6日
  • 修改了问题 1月6日
  • 创建了问题 1月6日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么