c中的嵌套结构

AL-*_*ami 9 c structure declaration

我必须构建一个嵌套结构来存储一些人的某些基本信息(姓名,年龄,地址).所以我创建了一个名为"info"的结构,并保存地址,我在"info"中创建了另一个嵌套结构,名为"address".但每当我提示使用for循环存储值时,我都会收到错误.这里有什么问题,我该如何解决?

[错误]'struct Info'没有名为'address'的成员
[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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Vla*_*cow 13

struct address在结构中声明了一个类型,Info但不是此类型的数据成员.

你可以写例如

struct Info{
    char name[30];
    int age;
    struct address{
        char area_name[39];
        int house_no;
        char district[39];
    } address;
      ^^^^^^^^
};
Run Code Online (Sandbox Code Playgroud)


For*_*Bru 6

目前您所拥有的只是一个名为的结构的声明address,但是您将需要一个名为in 的变量来使用该语法。addressstruct InfoPerson[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
};
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用以下内容:

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
};
Run Code Online (Sandbox Code Playgroud)

  • 为何改名?结构标签与结构元素位于不同的命名空间中,因此 `struct address { ... } address; 是完全有效的 C. (2认同)