2 malloc ze malloc_ze 于 2017.01.04 18:17 提问

求大神帮我看下这段程序,运行到“输入第二个学生姓名”就崩溃了。

#include
#include
struct student
{
int age;
char name[40];
float score;
};

void intput(struct student **st, int len);
void output(struct student **st, int len);

int main (void)
{
int len;
printf("请输入学生人数:");
scanf("%d", &len);
struct student * st = (struct student*)malloc(sizeof(struct student) * len);
intput(&st, len);
output(&st, len);

return 0;

}

void intput(struct student **st, int len)
{
int i;
for (i=0; i {
printf("请输入第%d个人的姓名:", i+1);
scanf("%s", &st[i]->name);
printf("请输入第%d个人的年龄:", i+1);
scanf("%d", &st[i]->age);
printf("请输入第%d个人的分数:", i+1);
scanf("%f", &st[i]->score);
}
}

void output(struct student **st, int len)
{
int i;
for (i=0; i {
printf("第%d个人的信息:\n", i+1);
printf("姓名:%s\n", st[i]->name);
printf("年龄:%d\n", st[i]->age);
printf("分数:%f\n", st[i]->score);
}
}

4个回答

YXTS122
YXTS122   2017.01.04 18:30

这程序没必要用到二级指针吧?intput(st,len);这样不是很好么?

YXTS122
YXTS122 output(st,len);改为这样
一年多之前 回复
YXTS122
YXTS122 把**改为*试试
一年多之前 回复
malloc_ze
malloc_ze 其实都不用用函数啦,我就是试试这样能不能不实现,然后现在出现问题,自己还找不到,就来问了
一年多之前 回复
YXTS122
YXTS122   2017.01.04 23:11

#include <stdio.h>
#include <malloc.h>
struct student
{
int age;
char name[40];
float score;
};
void intput(struct student **st, int len);
void output(struct student **st, int len);
int main (void)
{
int k;
const int len=3;
struct student st[len];
for (k=0;k<len;k++)
{
st[k]= (struct student
)malloc(sizeof (struct student) );
}
intput(st, len);
output(st, len);
return 0;
}
void intput(struct student **st, int len)
{
int i;
for (i=0; i<len; ++i)
{
printf("请输入第%d个人的姓名:", i+1);
scanf("%s", &st[i]->name);
printf("请输入第%d个人的年龄:", i+1);
scanf("%d", &st[i]->age);
printf("请输入第%d个人的分数:", i+1);
scanf("%f", &st[i]->score);
}
}
void output(struct student **st, int len)
{
int i;
for (i=0; i<len; ++i)
{
printf("第%d个人的信息:\n", i+1);
printf("姓名:%s\n", st[i]->name);
printf("年龄:%d\n", st[i]->age);
printf("分数:%f\n", st[i]->score);
}
}
改为这样试试

YXTS122
YXTS122 这个复制得不是很好,漏了个 *
一年多之前 回复
YXTS122
YXTS122   2017.01.04 23:17

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

struct student
{
int age;
char name[40];
float score;
};
void intput(struct student **st, int len);
void output(struct student **st, int len);
int main (void)
{
int k;
const int len=3;
struct student * st[len];
for (k=0;k<len;k++)
{
st[k]= (struct student * )malloc(sizeof (struct student) );
}
intput(st, len);
output(st, len);
return 0;
}
void intput(struct student **st, int len)
{
int i;
for (i=0; i<len; ++i)
{
printf("请输入第%d个人的姓名:", i+1);
scanf("%s", &st[i]->name);
printf("请输入第%d个人的年龄:", i+1);
scanf("%d", &st[i]->age);
printf("请输入第%d个人的分数:", i+1);
scanf("%f", &st[i]->score);
}
}
void output(struct student **st, int len)
{
int i;
for (i=0; i<len; ++i)
{
printf("第%d个人的信息:\n", i+1);
printf("姓名:%s\n", st[i]->name);
printf("年龄:%d\n", st[i]->age);
printf("分数:%f\n", st[i]->score);
}
}

qq423399099
qq423399099   Ds   Rxr 2017.01.05 10:52

改变指针指向的内存空间的内容,用一级指针就行了。
要改变指针的指向才需要用二级指针。
改成下面这样就行了:

 #include <stdio.h>
#include <malloc.h>
struct student
{
    int age;
    char name[40];
    float score;
};

void intput(struct student *st, int len);
void output(struct student *st, int len);

int main(void)
{
    int len;
    printf("请输入学生人数:");
    scanf("%d", &len);
    struct student * st = (struct student*)malloc(sizeof(struct student) * len);
    intput(st, len);
    output(st, len);

    return 0;
}

void intput(struct student *st, int len)
{
    int i;
    for (i = 0; i<len; ++i)
    {
        printf("请输入第%d个人的姓名:", i + 1);
        scanf("%s", &st[i].name);
        printf("请输入第%d个人的年龄:", i + 1);
        scanf("%d", &st[i].age);
        printf("请输入第%d个人的分数:", i + 1);
        scanf("%f", &st[i].score);
    }
}

void output(struct student *st, int len)
{
    int i;
    for (i = 0; i<len; ++i)
    {
        printf("第%d个人的信息:\n", i + 1);
        printf("姓名:%s\n", st[i].name);
        printf("年龄:%d\n", st[i].age);
        printf("分数:%f\n", st[i].score);
    }
}
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
#练习#输入学生姓名与成绩,求班级平均分以及最低分学生成绩的姓名,最高成绩及姓名。
#include using namespace std; int main() { int grade[31],g; int sum=0,MING=0,MAXG=0,MINS=0,MAXS=0; char name[31],n; cout"Please input student name and this grade:" ; c
编写一个应用程序,用户分别从两个文本框输入学术的姓名和分数,程序按成绩排序将这些学生的姓名和分数显示在一个文本区中
package test;import java.awt.Color; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Collections; import
设计一个应用程序,用于学生成绩的输入,要求能输入学生姓名、学号、性别以及3门课程成绩。在该程序中要用到的控件:静态文本、编辑框(单行和多行)、单选框、复选框、组框、按钮等,结果如附件程序。
设计一个应用程序,用于学生成绩的输入,要求能输入学生姓名、学号、性别以及3门课程成绩。在该程序中要用到的控件:静态文本、编辑框(单行和多行)、单选框、复选框、组框、按钮等,结果如附件程序。
02:输出最高分数的学生姓名
描述 输入学生的人数,然后再输入每位学生的分数和姓名,求获得最高分数的学生的姓名。 输入第一行输入一个正整数N(N 分数 姓名 分数是一个非负整数,且小于等于100; 姓名为一个连续的字符串,中间没有空格,长度不超过20。 数据保证最高分只有一位同学。输出获得最高分数同学的姓名。样例输入 5 87 lilei 99 hanmeimei 97 lily 96 lucy 77 ji
输入学生个数,学生姓名和他们的成绩,然后按照学生成绩降序排列
package Test2016; import java.util.Scanner; //提示用户输入学生个数,学生姓名和他们的成绩,然后按照学生成绩降序排列; public class test0225 {     private String name;     private long grade;     public long getGrade(){         re
编写一个应用程序,用户分别从两个文本框输入学术的姓名和分数,程序按成绩排序将这些学生的姓名和分数显示在一个文本区中。
编写一个应用程序,用户分别从两个文本框输入学术的姓名和分数,程序按成绩排序将这些学生的姓名和分数显示在一个文本区中。ScoreOrder.javapackage setfrome;import java.awt.FlowLayout; import java.awt.Label; import java.awt.event.ActionEvent; import java.awt.event.Act
输出最高分数的学生姓名(不难,就是有坑难满分)
引用块内容02:输出最高分数的学生姓名 总时间限制: 1000ms 内存限制: 65536kB 描述 输入学生的人数,然后再输入每位学生的分数和姓名,求获得最高分数的学生的姓名。 输入 第一行输入一个正整数N(N <= 100),表示学生人数。接着输入N行,每行格式如下: 分数 姓名 分数是一个非负整数,且小于等于100; 姓名为一个连续的字符串,中间没有空格,长度不超过20。 数
用c++编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班级和成绩,教师数据有编号、姓名、职称和部门。
用c++编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班级和成绩,教师数据有编号、姓名、职称和部门。
大神帮我看下这段代码怎么修改,
-
C#——输入学生的姓名成绩
程序描述及代码实现; /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2014, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:定义描述学生基本情况的类,设置姓名,设置三门课的成绩,求总成绩和平均成绩。 * 作 者: 李莉 * 完成日期: 2016 年 04月 08日 *