c中的嵌套结构
Nested structure in c
我必须构建一个嵌套结构来存储有关某人的一些基本信息(姓名、年龄、地址)。所以我创建了一个名为 "info" 的结构,为了保存地址,我在 "info" 中创建了另一个名为 "address" 的嵌套结构。但是每当我提示使用 for 循环存储值时,我都会出错。这里有什么问题,我该如何解决?
[Error] 'struct Info' has no member named 'address'
[Warning] declaration does not declare anything [enabled by default]
#include <stdio.h>
int main(){
struct Info{
char name[30];
int age;
struct address{
char area_name[39];
int house_no;
char district[39];
};
};
struct Info Person[10];
int i;
for(i=0;i<10;i++){
printf("enter info of person no %d\n",i);
printf("enter name\n");
scanf("%s",&Person[i].name);
printf("enter age\n");
scanf("%d",&Person[i].age);
printf("enter address :\n");
printf("enter area name :\n");
scanf("%s",&Person[i].address.area_name);
printf("enter house no : \n");
scanf("%d",&Person[i].address.house_no);
printf("enter district : \n");
scanf("%s",&Person[i].address.district);
}
}
您在结构 Info
中声明了一个类型 struct address
但不是该类型的数据成员。
你可以这样写
struct Info{
char name[30];
int age;
struct address{
char area_name[39];
int house_no;
char district[39];
} address;
^^^^^^^^
};
结构 Info
有一个名为 address
的嵌套 结构 ,但没有名为 address
.
的成员变量
你应该做
struct Info
{
...
struct
{
...
} address;
};
您目前拥有的只是一个名为 address
的结构的 声明 ,但您需要一个 变量 在 struct Info
中调用 address
以使用 Person[i].address
语法。
你需要的是将address
这个词移动一点:
struct Info{
char name[30];
int age;
struct {
char area_name[39];
int house_no;
char district[39];
} address; // <<< here it is now
};
另一种选择是使用以下内容:
struct Info{
char name[30];
int age;
struct addr{ // as noted by @JonathanLeffler,
// it's not necessary to change the
// name of a struct
char area_name[39];
int house_no;
char district[39];
};
struct addr address; // <<< a variable of type struct addr
};
从 http://www.c4learn.com/c-programming/c-nested-structure/ 看来你应该 "dub" 你的地址结构,即
struct address{
char area_name[39];
int house_no;
char district[39];
} adr_;
然后设置门牌号:
&Person[i].adr_.house_no
这是使用 anonymous structure 更新后的代码。我启用了 C11 来编译它。
#include <stdio.h>
int main(){
struct Info{
char name[30];
int age;
struct {
char area_name[39];
int house_no;
char district[39];
};
};
struct Info Person[10];
int i;
for(i=0;i<10;i++){
printf("enter info of person no %d\n",i);
printf("enter name\n");
scanf(" %s",Person[i].name);
printf("enter age\n");
scanf("%d",&Person[i].age);
printf("enter address :\n");
printf("enter area name :\n");
scanf(" %s",Person[i].area_name);
printf("enter house no : \n");
scanf("%d",&Person[i].house_no);
printf("enter district : \n");
scanf(" %s",Person[i].district);
}
}
我必须构建一个嵌套结构来存储有关某人的一些基本信息(姓名、年龄、地址)。所以我创建了一个名为 "info" 的结构,为了保存地址,我在 "info" 中创建了另一个名为 "address" 的嵌套结构。但是每当我提示使用 for 循环存储值时,我都会出错。这里有什么问题,我该如何解决?
[Error] 'struct Info' has no member named 'address'
[Warning] declaration does not declare anything [enabled by default]
#include <stdio.h>
int main(){
struct Info{
char name[30];
int age;
struct address{
char area_name[39];
int house_no;
char district[39];
};
};
struct Info Person[10];
int i;
for(i=0;i<10;i++){
printf("enter info of person no %d\n",i);
printf("enter name\n");
scanf("%s",&Person[i].name);
printf("enter age\n");
scanf("%d",&Person[i].age);
printf("enter address :\n");
printf("enter area name :\n");
scanf("%s",&Person[i].address.area_name);
printf("enter house no : \n");
scanf("%d",&Person[i].address.house_no);
printf("enter district : \n");
scanf("%s",&Person[i].address.district);
}
}
您在结构 Info
中声明了一个类型 struct address
但不是该类型的数据成员。
你可以这样写
struct Info{
char name[30];
int age;
struct address{
char area_name[39];
int house_no;
char district[39];
} address;
^^^^^^^^
};
结构 Info
有一个名为 address
的嵌套 结构 ,但没有名为 address
.
你应该做
struct Info
{
...
struct
{
...
} address;
};
您目前拥有的只是一个名为 address
的结构的 声明 ,但您需要一个 变量 在 struct Info
中调用 address
以使用 Person[i].address
语法。
你需要的是将address
这个词移动一点:
struct Info{
char name[30];
int age;
struct {
char area_name[39];
int house_no;
char district[39];
} address; // <<< here it is now
};
另一种选择是使用以下内容:
struct Info{
char name[30];
int age;
struct addr{ // as noted by @JonathanLeffler,
// it's not necessary to change the
// name of a struct
char area_name[39];
int house_no;
char district[39];
};
struct addr address; // <<< a variable of type struct addr
};
从 http://www.c4learn.com/c-programming/c-nested-structure/ 看来你应该 "dub" 你的地址结构,即
struct address{
char area_name[39];
int house_no;
char district[39];
} adr_;
然后设置门牌号:
&Person[i].adr_.house_no
这是使用 anonymous structure 更新后的代码。我启用了 C11 来编译它。
#include <stdio.h>
int main(){
struct Info{
char name[30];
int age;
struct {
char area_name[39];
int house_no;
char district[39];
};
};
struct Info Person[10];
int i;
for(i=0;i<10;i++){
printf("enter info of person no %d\n",i);
printf("enter name\n");
scanf(" %s",Person[i].name);
printf("enter age\n");
scanf("%d",&Person[i].age);
printf("enter address :\n");
printf("enter area name :\n");
scanf(" %s",Person[i].area_name);
printf("enter house no : \n");
scanf("%d",&Person[i].house_no);
printf("enter district : \n");
scanf(" %s",Person[i].district);
}
}