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 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀