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);
    }
}