C语言结构体数组指定初始化器时,下面的三种方法,只有第三种可以,但是第一,二种,我看不出语法上哪错了,编译器DEVc++会报错
[Error] C99 designator 'num_insur' outside aggregate initializer
查了不少资料,但还是找不到...
烦请园友帮忙看看
代码如下:
include
include
include
define LEN 20
define COUNT2
define NUM_LEN 10
struct name
{
char Fname[LEN];
char Mname[LEN];
char Lastname[LEN];
};
struct insurrance
{
char num_insur[NUM_LEN];
struct name names;
};
void input1(int count, struct insurrance arr_insur[]);
void input2(int count, struct insurrance *pinsur);
int main(void)
{
struct insurrance arr_insur[COUNT] =
{
{
//第一种:不可以
.num_insur = "12345678",
{"sheng", "M.", "shuai"}
//第二种不可以
//.names.Fname = "sheng",
//.names.Mname = "M.",
//.names.Lastname = "shuai"
},
{
.num_insur = "12345678",
.names = {"shi", "T.", "long"}
//.Fname = "shi",
//.Mname = "",
//.Lastname = "long"
}
};
//第三种可以
//struct insurrance arr_insur[COUNT];
//strcpy(arr_insur[0].num_insur, "123456789");
//strcpy(arr_insur[0].names.Fname, "sheng");
//strcpy(arr_insur[0].names.Lastname, "shuai");
//strcpy(arr_insur[0].names.Mname, "S");
//
//strcpy(arr_insur[1].num_insur, "123456789");
//strcpy(arr_insur[1].names.Fname, "shi");
//strcpy(arr_insur[1].names.Lastname, "long");
//strcpy(arr_insur[1].names.Mname, "S");
//printf("%s", arr_insur[1].names.Mname);
input1(COUNT, arr_insur);
input2(COUNT, arr_insur);
return 0;
}
void input2(int count, struct insurrance *pinsur)
{
int i;
for(i = 0; i < count; i++)
{
if(strcmp((pinsur+i)->names.Mname, "") > 0)
{
printf("%s,%s %s. -- %s\n", (pinsur+i)->names.Fname, (pinsur+i)->names.Lastname, (pinsur+i)->names.Mname, (pinsur+i)->num_insur);
}else
{
printf("%s,%s -- %s\n", (pinsur+i)->names.Fname, (pinsur+i)->names.Lastname, (pinsur+i)->num_insur);
}
}
}
void input1(int count, struct insurrance arr_insur[])
{
int i;
for(i = 0; i < count; i++)
{
if(strcmp(arr_insur[i].names.Mname, "") > 0)
{
printf("%s,%s %s. -- %s\n", arr_insur[i].names.Fname, arr_insur[i].names.Lastname, arr_insur[i].names.Mname,arr_insur[i].num_insur);
}else
{
printf("%s,%s -- %s\n", arr_insur[i].names.Fname, arr_insur[i].names.Lastname, arr_insur[i].num_insur);
}
}
}