当前位置: 代码迷 >> C语言 >> [求助]有关结构体的问题
  详细解决方案

[求助]有关结构体的问题

热度:103   发布时间:2007-08-05 18:23:07.0
[求助]有关结构体的问题

主位高手们,请教一下:
结构体中还可以继续包含结构体。例如
struct data
{float time;
struct setting;
};
问题是:data形结构体里的setting形结构体的个数能不能根据用户的输入而决定???就是在建立结构体data时,能不能根据用户的输入而决定建立的结构体setting的个数????

搜索更多相关的解决方案: 问题  setting  结构体  用户  

----------------解决方案--------------------------------------------------------
可以的,结构体的最后一项可以设置为可变的,具体怎么样我不是很清楚,看看相关的书吧
----------------解决方案--------------------------------------------------------

你可以将setting定义为指向链表的指针,当用户输入后,用malloc函数生成指定长度的链表.


----------------解决方案--------------------------------------------------------

只是大概明白你的意思,应该可以。比如2楼大哥说的建立指针连表,或者改为结构体数组也可以


----------------解决方案--------------------------------------------------------
回复:(李天飞)只是大概明白你的意思,应该可以。比...

好的,我先试试


----------------解决方案--------------------------------------------------------
以下是引用jackys2006在2007-8-5 18:35:35的发言:
可以的,结构体的最后一项可以设置为可变的,具体怎么样我不是很清楚,看看相关的书吧

不少最后一项,是任何一项都可以,
还有,不能说是什么可变的,只是一个指针,该指针本身的大小是固定的,只是它指向哪里,指向多大的内存区域,是不确定的。
----------------解决方案--------------------------------------------------------

回复:(maoguoqing)以下是引用jackys2006在2007-8-5...
我是想问:在一个data形结构体里面setting结构体的个数能不能由用户决定???
----------------解决方案--------------------------------------------------------

你的意思这样?

struct data
{float time;
struct setting s1;
struct setting s2;
...
struct setting sn;
};

如果是那样的话就如3楼所说
struct data
{float time;
struct setting *pS;//指向setting类型的指针就可以了
};

到时候你就可以这样使用:
scanf("%d",&n);
struct data d;
d.pS = (struct setting*) malloc(sizeof(struct setting)*n);


----------------解决方案--------------------------------------------------------
回复:(maoguoqing)你的意思这样?struct data{floa...

你好,这是我按照你说的编的程序,可是怎么输出的时候只有前两个数据是正确的?
#define NULL 0
struct data
{long time;
struct setting *ps;
struct data *next;
};
struct setting
{int money;
float sum;
struct setting *next;
};
main()
{int n,a;
char s;
struct data *d;struct setting *b;
printf("Please input the totol number \n");
scanf("%d",&n);
d=(struct data*)malloc(sizeof(struct data));
d->ps=b=(struct setting*)malloc(sizeof(struct setting)*n);

printf("please tell me wen you bought this jijin\n");
scanf("%ld",&(*d).time);
for(a=1;a<=n;a++)
{
printf("money\n");
scanf("%d",&((*d).ps)->money);
printf("sum\n");
scanf("%d",&((*d).ps)->sum);
if(a!=n)
{
(d->ps)->next=(struct setting*)malloc(sizeof(struct setting)*n);
d->ps=(struct setting*)malloc(sizeof(struct setting)*n);
}
else
d->ps->next=NULL;
}
d->next=NULL;
getch();
d->ps=b;
printf("%ld\n",(*d).time);
do
{
printf("%d\n",((*d).ps)->money);
printf("%d\n",((*d).ps)->sum);
d->ps=(d->ps)->next;
getch();
}while(d->ps!=NULL);
getch();
}


----------------解决方案--------------------------------------------------------

你把struct setting看成一个类型不就行了,把它换成int看看,用个动态分配内存不就结了!


----------------解决方案--------------------------------------------------------
  相关解决方案