c中的嵌套结构

时间:2016-03-08 14:22:33

标签: c structure declaration

我必须构建一个嵌套结构来存储一些人的某些基本信息(姓名,年龄,地址)。所以我创建了一个名为" 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);
    }
}

5 个答案:

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