我必须构建一个嵌套结构来存储一些人的某些基本信息(姓名,年龄,地址)。所以我创建了一个名为" info"并保持地址我在" info"内创建了另一个嵌套结构。叫"地址"。但每当我提示使用for循环存储值时,我都会收到错误。这里有什么问题,如何解决?
[错误]' struct Info'没有名为'地址'
的成员 [Warning]声明不声明任何[默认启用]
#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);
}
}
答案 0 :(得分:10)
您在结构struct address
中声明了类型Info
,但未在此类型的数据成员中声明。
您可以编写例如
struct Info{
char name[30];
int age;
struct address{
char area_name[39];
int house_no;
char district[39];
} address;
^^^^^^^^
};
答案 1 :(得分:4)
结构Info
有一个名为address
的嵌套结构,但不是名为address
的成员变量。
你应该做
struct Info
{
...
struct
{
...
} address;
};
答案 2 :(得分:4)
您目前所拥有的仅仅是名为address
的结构的声明,但您需要一个名为address
的变量在struct Info
中使用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
};
答案 3 :(得分:1)
从http://www.c4learn.com/c-programming/c-nested-structure/看起来你应该“配音”你的地址结构,即
struct address{
char area_name[39];
int house_no;
char district[39];
} adr_;
然后设置门牌号码:
&Person[i].adr_.house_no
答案 4 :(得分:0)
以下是使用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);
}
}