二维动态阵列结构不能如期工作

问题描述 投票:0回答:2

所以,我有一个二维结构数组,我逐个输入结构元素,但程序却打印出一些随机数据,而不是输入的信息。我逐个输入结构元素,但程序却打印出一些随机数据,而不是输入的信息。比如说: ptr[0][0].Flat_ID 应该是101,但它打印的是 8 至于其他元素,完全是胡言乱语。知道它为什么会这样吗?"结构"。

typedef struct
{
   int Flat_ID;
   int count_Rooms;
   int count_Adults;
   int count_Children;
   char Family_Surname[20];
   char Date[15];
   float rent;
}S_Apartament;

里面的程序... main():

int floors=1, flats_per_floor=2;
S_Apartament Flats;
S_Apartament **ptr = (S_Apartament **)malloc(sizeof(S_Apartament*) * floors);//Declaring an array of pointers. It has to be dynamic, as per the assignment
        if(ptr == NULL)
        {
            printf("Memory fail");
            free(ptr);
            exit(8);

        }
        for (int i = 0; i <  floors; i++)
        {
            ptr[i] = (S_Apartament *)malloc(sizeof(S_Apartament)*flats_per_floor);//Each pointer from the first array now is an array of its own, with elements being structures
            if(ptr[i] == NULL)
            {
                printf("Memory fail");
                free(ptr);
                exit(8);

            }
        }
        for(int i = 0; i <  floors; i++)
        {
            for(int j = 0; j < flats_per_floor; j++)
            {
                printf("ID:\n");
                scanf("%d", &ptr[i][j].Flat_ID);
                printf("\n");
                printf("Rooms:\n");
                scanf("%d", &ptr[i][j].count_Rooms);
                printf("\n");
                printf("Adults:\n");
                scanf("%d", &ptr[i][j].count_Adults);
                printf("\n");
                printf("Children:\n");
                scanf("%d", &ptr[i][j].count_Children);
                printf("\n");
                printf("Name:\n");
                scanf("%s", ptr[i][j].Family_Surname);
                printf("\n");
                printf("Date of entry: \n");
                scanf("%s", ptr[i][j].Date);
                printf("\n");
                printf("Rent:\n");
                scanf("%f", &ptr[i][j].rent);
                printf("\n");
                ptr[i][j]=Flats;
            }
        }
for(int i=0; i< floors; i++)//Prints read information
        {
            for(int j=0; j< flats_per_floor; j++)
            {
                printf("ID: %d\n", ptr[i][j].Flat_ID);
                printf("Rooms: %d\n", ptr[i][j].count_Rooms);
                printf("Adults: %d\n", ptr[i][j].count_Adults);
                printf("Children: %d\n", ptr[i][j].count_Children);
                printf("Name: %s\n", ptr[i][j].Family_Surname);
                printf("Date of entry: %s\n", ptr[i][j].Date);
                printf("Rent: %0.2f\n", ptr[i][j].rent);

            }
            printf("-----------------");
            printf("\n");
        }
free(ptr);

以下是输出示例。产出

c arrays pointers structure dynamic-memory-allocation
2个回答
0
投票

你没有检查 scanf. 只是不成功,成员没有被分配到值。


0
投票

命令 ptr[i][j]=Flats; 在每次迭代开始时都要删除,因为程序没有将信息保存在正确的位置。

for(int i = 0; i <  floors; i++)
        {
            for(int j = 0; j < flats_per_floor; j++)
            {
                printf("ID:\n");
                scanf("%d", &ptr[i][j].Flat_ID);
                printf("\n");
                printf("Rooms:\n");
                scanf("%d", &ptr[i][j].count_Rooms);
                printf("\n");
                printf("Adults:\n");
                scanf("%d", &ptr[i][j].count_Adults);
                printf("\n");
                printf("Children:\n");
                scanf("%d", &ptr[i][j].count_Children);
                printf("\n");
                printf("Name:\n");
                scanf("%s", ptr[i][j].Family_Surname);
                printf("\n");
                printf("Date of entry: \n");
                scanf("%s", ptr[i][j].Date);
                printf("\n");
                printf("Rent:\n");
                scanf("%f", &ptr[i][j].rent);
                printf("\n");

            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.