搜索
查看: 1712|回复: 3
打印 上一主题 下一主题

求解哪里出错了

[复制链接]
跳转到指定楼层
楼主
发表于 2012-8-17 22:49:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
编译没有问题如果一个学生也没有问题,但是2个以上学生就挂掉了。。。求解,另外动态内存需要类似2级指针的处理吗??
# include <stdio.h>
# include <malloc.h>
struct student
{
  int     age;
  double   score;
  int    name;
};
void scan   (struct student ** parr,int a)
{
int i;
    for(i=0 ; i<a ; ++i)
  {
    parr[i]->name = i+1;
    printf("\n请输入第%d个学生的年纪",i+1);
    scanf ("%d", & parr[i]->age);//**,scanf(&)
    printf("\n请输入第%d个学生的成绩",i+1);
    scanf ("%g", & parr[i]->score);   
  }
}
void maopao (struct student ** parr,int len)
{
int a,b;
struct student * t; //a,b用于循环,t用于变换大小数
for(a=0; a<len-1 ; ++a)
  for(b = 0; b<len-1-a; ++b)
   if (parr[b]->score  >   parr[b+1]->score)
   {
    t           = parr[b];
    parr[b]     = parr[b+1];
    parr[b + 1] = t;
   }

}
void print(struct student ** parr,int a)
{
int i;
for(i= 0 ; i<a ; ++i)
{
  printf("%d\n",parr[i]-> name );
  printf("%d\n",parr[i]-> age  );
  printf("%g\n",parr[i]-> score);
}
}
int main ()//学生管理系统【测试】
{
int a;                // a 表示学生个数
int i;     //i是内部循环用的
struct student * parr;
printf("学生管理系统\n");
printf("请输入有几个学生,学生个数= ");
scanf ("%d",&a);
parr = (struct student * )malloc(a * sizeof (struct student));
  //parr是 struct student * 类型 //parr[0.1.2.3.4]

scan  (& parr, a);   //执行输入各个学生参数的函数
maopao(& parr,a);   //执行成绩由高到低进行排序的函数
print (& parr,a);  //试行输出
return 0;
}

沙发
发表于 2012-9-15 08:43:23 | 只看该作者
我是新手,这代码我一个没有看懂,好难呀!!
板凳
发表于 2012-9-27 23:13:50 | 只看该作者
么看明白:
for(i=0 ; i<a ; ++i)
  {
    parr[i]->name = i+1;
    printf("\n请输入第%d个学生的年纪",i+1);
    scanf ("%d", & parr[i]->age);//**,scanf(&)
    printf("\n请输入第%d个学生的成绩",i+1);
    scanf ("%g", & parr[i]->score);   
  }
1,->这个是什么意思?
2,for(i=0 ; i<a ; ++i)
  {
    parr[i]->name = i+1;
为什么这里又有I+1? 前面for语句,++i,带入循环时到底是+1再带入,循环结束后再+1?
name=i+1这里又来了一个 那不是已经+2了?
地板
发表于 2012-10-7 12:33:03 来自手机 | 只看该作者
学习              
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表