| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 801 人关注过本帖
标题:结构体指针一问
取消只看楼主 加入收藏
lixnkei
Rank: 4
来 自:樱之国度
等 级:业余侠客
帖 子:133
专家分:227
注 册:2008-5-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
结构体指针一问
请问为何不行呢?我快疯了。


程序代码:
# include <stdio.h>
# include <malloc.h>
   
//函数前置声明
void InputStudent(struct Student ** p, int len);
void OutputStudent(struct Student ** p, int len);
   
//结构体,构建学生结构体
struct Student
{
    int a;
    float b;
    char c[10];
};
   
//主函数
int main(void)
{
    struct Student * p;
    struct Student t;
    int len, i, j;
   
    printf("请输入学生的人数:");
    scanf("%d", &len);
   
    p = (struct Student *) malloc (len * sizeof(struct Student));
   
    //输入
    InputStudent(&p, len);
   
   
    //冒泡排序
    for(i=0; i<len-1; i++)
    {
        for(j=0; j<len-1-i; j++)
        {
            if(p[j].b < p[j+1].b)
            {
                t = p[j];
                p[j] = p[j+1];
                p[j+1] = t;
            }
        }
    }
   
    //输出
    OutputStudent(&p, len); 

    return 0;
}
   
//输入函数
void InputStudent(struct Student ** p, int len)
{
    int i;
   
    for(i=0; i<len; i++)
    {
        printf("请输入第 %d 个学生的信息:\n", i+1);
        printf("年龄:");
        scanf("%d", &(*p[i]).a);
        printf("成绩:");
        scanf("%f", &(*p[i]).b);
        printf("姓名:");
        scanf("%s", (*p[i]).c);     //赋值出错?搞了一天没弄懂
    }
   
    return;
}
   
//输出函数
void OutputStudent(struct Student ** p, int len)
{
    int i;
   
    printf("\n\n学生信息如下:\n");
    for(i=0; i<len; i++)
    {
        printf("第 %d 个学生的信息:\n", i+1);
        printf("年龄: %d ", (*p[i]).a);
        printf("成绩: %f ", (*p[i]).b);
        printf("姓名: %s \n", (*p[i]).c);
    }
   
    return;
}


[ 本帖最后由 lixnkei 于 2010-3-4 17:07 编辑 ]
搜索更多相关主题的帖子: 结构体 
2010-03-04 12:15
lixnkei
Rank: 4
来 自:樱之国度
等 级:业余侠客
帖 子:133
专家分:227
注 册:2008-5-13
收藏
得分:0 
回复 2楼 林语
我把他都写到主函数是运行没问题的,但我把他分开几个函数来写,就不行了。狂晕呀。


老师说:会写代码的人多如牛毛,但写得很规范的却不多。代码要规范,养成好习惯~!
2010-03-04 14:08
lixnkei
Rank: 4
来 自:樱之国度
等 级:业余侠客
帖 子:133
专家分:227
注 册:2008-5-13
收藏
得分:0 
回复 4楼 玩出来的代码
加了也不行,人数输入2程序运行没问题,但输入3的话,到第三个学生的赋值时候就出错弹出了。


老师说:会写代码的人多如牛毛,但写得很规范的却不多。代码要规范,养成好习惯~!
2010-03-04 14:49
lixnkei
Rank: 4
来 自:樱之国度
等 级:业余侠客
帖 子:133
专家分:227
注 册:2008-5-13
收藏
得分:0 
喔,终于可以了,万分感谢

[ 本帖最后由 lixnkei 于 2010-3-4 17:01 编辑 ]


老师说:会写代码的人多如牛毛,但写得很规范的却不多。代码要规范,养成好习惯~!
2010-03-04 16:46
lixnkei
Rank: 4
来 自:樱之国度
等 级:业余侠客
帖 子:133
专家分:227
注 册:2008-5-13
收藏
得分:0 
改好了,能运行了,但不明白为何

&(*p[i]).b  不行,要写成  &(*p)[i].b  呢?


老师说:会写代码的人多如牛毛,但写得很规范的却不多。代码要规范,养成好习惯~!
2010-03-04 17:09
lixnkei
Rank: 4
来 自:樱之国度
等 级:业余侠客
帖 子:133
专家分:227
注 册:2008-5-13
收藏
得分:0 
回复 12楼 玩出来的代码
喔,明白了,原来如此。我的 &(*p[i]) 中的 p 被认为是二级指针的
p 了,所以运行出错。

请问有各符号的优先级列表吗?


老师说:会写代码的人多如牛毛,但写得很规范的却不多。代码要规范,养成好习惯~!
2010-03-04 17:34
lixnkei
Rank: 4
来 自:樱之国度
等 级:业余侠客
帖 子:133
专家分:227
注 册:2008-5-13
收藏
得分:0 
放出最终修改版本,与首页的不一样哟。

程序代码:
# include <stdio.h>
# include <malloc.h>

//函数前置声明
void InputStudent(struct Student * p, int len);
void OutputStudent(struct Student * p, int len);
void Sort(struct Student * p, int len);

//结构体,构建学生结构体
struct Student
{
    int a;
    float b;
    char c[10];
};

//主函数
int main(void)
{
    struct Student * p;
    int len;

    printf("请输入学生的人数:");
    scanf("%d", &len);

    p = (struct Student *) malloc (len * sizeof(struct Student));

    //输入
    InputStudent(p, len);


    //冒泡排序
    Sort(p, len);

    //输出
    OutputStudent(p, len);

    return 0;
}

//输入函数
void InputStudent(struct Student * p, int len)
{
    int i;

    for(i=0; i<len; i++)
    {
        printf("请输入第 %d 个学生的信息:\n", i+1);
        printf("年龄:");
        scanf("%d", &p[i].a);
        printf("成绩:");
        scanf("%f", &p[i].b);
        printf("姓名:");
        scanf("%s", p[i].c);
    }

    return;
}

//输出函数
void OutputStudent(struct Student * p, int len)
{
    int i;

    printf("\n\n学生信息如下:\n");
    for(i=0; i<len; i++)
    {
        printf("第 %d 个学生的信息:\n", i+1);
        printf("年龄: %d ", p[i].a);
        printf("成绩: %f ", p[i].b);
        printf("姓名: %s \n", p[i].c);
    }

    return;
}

//冒泡排序函数
void Sort(struct Student * p, int len)
{
    int i, j;
    struct Student t;
    for(i=0; i<len-1; i++)
    {
        for(j=0; j<len-1-i; j++)
        {
            if(p[j].b < p[j+1].b)
            {
                t = p[j];
                p[j] = p[j+1];
                p[j+1] = t;
            }
        }
    }
}


[ 本帖最后由 lixnkei 于 2010-3-4 22:43 编辑 ]


老师说:会写代码的人多如牛毛,但写得很规范的却不多。代码要规范,养成好习惯~!
2010-03-04 22:37
快速回复:结构体指针一问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019945 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved