| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1211 人关注过本帖
标题:这里的结构体中的年月日如何传递进来?
只看楼主 加入收藏
七夜之华
Rank: 3Rank: 3
来 自:China
等 级:论坛游侠
威 望:5
帖 子:82
专家分:103
注 册:2014-9-7
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:27 
这里的结构体中的年月日如何传递进来?
/*分配一段区域,存放一个学生信息。*/
#include <stdio.h>
main()
{
      struct data
      {
             int month;
             int day;
             int year;
      };
      struct stu{
             char *name;
             char *sex;
             struct data *birthday;
             float score;
             } *ps;
            
             ps = (struct stu*)malloc(sizeof(struct stu));
             ps->name = "MrDong";
             ps->sex = "MEN";
             ps->birthday = 06,11,1995;
             ps->score = 100;
              
             printf("name = %s\nsex = %s\n",ps->name,ps->sex);
             printf("birthday = %d\nscore = %f\n",ps->birthday,ps->score);
             system("pause");
            
}
/* 输出结果为:
name = MrDong
sex = MEN
birthday = 6
score = 100.000000
请按任意键继续. . .

*/





搜索更多相关主题的帖子: 年月日 include 结构体 如何 信息 
2015-11-27 11:47
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:8 
压根就没有传进来,struct data *birthday;是个结构体指针,
ps = (struct stu*)malloc(sizeof(struct stu)); 分配了空间没错,
但分配完后,此时ps->birthday指向哪里?你并没有分配struct data空间给它,变成了野指针。。

 ps->birthday = 06,11,1995;结构体成员变量并不能这样赋值。你的编译器只好把第一个数扔给了指针birthday, 但多半会警告你这个地方有问题。VC里直接指出该行编译错误
error C2440: '=' : cannot convert from 'const int' to 'struct main::data *'



我们都在路上。。。。。
2015-11-27 12:42
七夜之华
Rank: 3Rank: 3
来 自:China
等 级:论坛游侠
威 望:5
帖 子:82
专家分:103
注 册:2014-9-7
收藏
得分:0 
回复 2楼 hellovfp 我改了程序,虽然结果传进来了,可是感觉不美,能简化点不?
#include <stdio.h>
main()
{
      struct data
      {
             int month;
             int day;
             int year;
      } *bir;
      struct stu{
             char *name;
             char *sex;
             //struct data *birthday;
            
             float score;
             } *ps;
             bir = (struct data*)malloc(sizeof(struct data));
             ps = (struct stu*)malloc(sizeof(struct stu));
             ps->name = "MrDong";
             ps->sex = "MEN";
             //ps->birthday = 06;
             bir->month = 06;
             bir->day = 19;
             bir->year = 1995;
             ps->score = 100;
              
             printf("name = %s\nsex = %s\n",ps->name,ps->sex);
             printf("birthday:%d-%d-%d\n",bir->month,bir->day,bir->year);
             printf("score = %f\n",ps->score);
             system("pause");
            
}


#############################################
##########################################
因为不懂、才要学习、只有学习、才有进步。
2015-11-27 15:56
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:3 
结构体可以嵌套使用,你可以不改动原结构体的结构。分配了ps后,加一句,
ps->birthday=(struct data*)malloc(sizeof(struct data));

后面引用时你可以写成这样:
ps->birthday->month = xxx;
j加油

我们都在路上。。。。。
2015-11-27 17:13
七夜之华
Rank: 3Rank: 3
来 自:China
等 级:论坛游侠
威 望:5
帖 子:82
专家分:103
注 册:2014-9-7
收藏
得分:0 
回复 4楼 hellovfp
图片附件: 游客没有浏览图片的权限,请 登录注册

根据你的提示,做到这种 效果,感觉还不是很美,能不能一次实现  ps->birthday 可以把年月日等信息都传进去呢。。

#############################################
##########################################
因为不懂、才要学习、只有学习、才有进步。
2015-11-27 18:27
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:10 
你可以修改stu结构如下:
      struct stu{
             char *name;
             char *sex;
             struct data br;
             float score;
         void (*birthday)(int, int, int, struct stu *);
             } *ps;
并把二个结构放到main函数外面。然后在结构下面,加入
void imp_birthday(int month, int day, int year, struct stu *ps)
{
    ps->br.month = month;
    ps->br.day   = day;
    ps->br.year  = year;
}

main函数里这样修改
void main()
{
    ps = (struct stu*)malloc(sizeof(struct stu));
    ps->birthday = imp_birthday;
    ps->name = "MrDong";
    ps->sex = "MEN";
    ps->score = 100;
    ps->birthday(06, 11, 1995, ps); //这是你想要的结果么?
              
    printf("name = %s\nsex = %s\n",ps->name,ps->sex);
    printf("birthday = %d\nscore = %f\n",ps->br.day,ps->score);
    system("pause");
}

我们都在路上。。。。。
2015-11-27 19:31
七夜之华
Rank: 3Rank: 3
来 自:China
等 级:论坛游侠
威 望:5
帖 子:82
专家分:103
注 册:2014-9-7
收藏
得分:0 
回复 6楼 hellovfp
说实话,你的程序我有些疑问(很大程度上没看懂哎)
1、void imp_birthday(int month, int day, int year, struct stu *ps)
{
    ps->br.month = month;
    ps->br.day   = day;
    ps->br.year  = year;
}

四个参数传了三个,最后一个怎么理解呢?
2、
图片附件: 游客没有浏览图片的权限,请 登录注册


#############################################
##########################################
因为不懂、才要学习、只有学习、才有进步。
2015-11-27 20:43
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你想达到什么目的?看你的档案,你是学过C++的,返回来问这种问题?

授人以渔,不授人以鱼。
2015-11-27 20:49
七夜之华
Rank: 3Rank: 3
来 自:China
等 级:论坛游侠
威 望:5
帖 子:82
专家分:103
注 册:2014-9-7
收藏
得分:0 
回复 8楼 TonyDeng
确实学过C++,那时候是大一学的,现在都大三了,为了给大四做准备,我准备把C语言弄透,弄细。

#############################################
##########################################
因为不懂、才要学习、只有学习、才有进步。
2015-11-27 21:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你这程序在数据结构上就是自己制造麻烦。

授人以渔,不授人以鱼。
2015-11-27 21:14
快速回复:这里的结构体中的年月日如何传递进来?
数据加载中...
 
   



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

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