国龙打代码 发表于 2020-6-14 14:35:29

关于结构体指针数数组(动态分配空间的问题)

就是创建一个图书馆的问题
//刚学C不久,🐟C视频课后答案没更新了,
我想问:
①创建一个结构体指针,后面给结构体分配空间比如 struct Book *book ;book=(struct Book*)malloc(n*sizeof(struct Book))定义一个指针开辟n个空间 与创建十个指针开辟一个空间是一样的吗?
②结构体动态分配空间,这方面感觉好混乱的感觉。
③请求帮助,就是带你学C带你飞中的,创建图书馆的问题,🐟友大佬们,帮帮,卡在这,不知道代码怎么写下去了,

#include<stdio.h>
#include<stdlib.h>

struct Data
{
        int year;
        int month;
        int day;
};

struct Book
{
   char name;
   char publisher;
   char author;
   float price;
   struct Data data;       
};

int main()
{
        int n;
        int i;
    printf("请输入要存入图书的数量:");       
        scanf("%d",&n);
        struct Book *ptr;
        ptr=(struct Book *)malloc(n*sizeof(struct Book));
        struct Book *book;
        //int length=(sizeof(book)/sizeof);
        for(i=0;i<n;i++)
        {
                printf("请输入书名:");
                scanf("%s",ptr->name);
                printf("请输入出版社:");
                scanf("%s",ptr->publisher);
                printf("请输入价格:");
                scanf("%f",&ptr->price);
                printf("请输入作者:");
                scanf("%s",ptr->author);
                printf("请输入发行日期:");
                scanf("%d-%d-%d",&ptr->data.year,&ptr->data.month,&ptr->data.day);
        }
        for(i=0;i<n;i++)
        {
                book=&ptr;
        }
       
       
        printf("welcome to 龙大大的图书馆\n");
        printf("龙大大目前的图书为:\n");
        for(i=0;i<n;i++)
        {
          printf("书名:");
          printf("%s",ptr->name);
          putchar('\n');
          printf("出版社:");
          printf("%s",book->publisher);
          putchar('\n');
          printf("作者:");
          printf("%s",book->author);
          putchar('\n');
          printf("发行日期:");
          printf("%d-%d-%d",book->data.year,book->data.month,book->data.day);
          putchar('\n');
          printf("价格:");
          printf("%.1f",book->price);       
          putchar('\n');
        }
       
        return 0;
       
}

guyihui 发表于 2022-1-14 00:25:23

1.你的ptr就已经可以遍历到所有结构体了,没要再定义一个book指针
2.第一个for 循环你的ptr一直停留在原地,你应该让ptr每次向后移动
建议:你可以将输入输出功能封装成函数,可以让你的代码看起来更舒服,有条理一些
页: [1]
查看完整版本: 关于结构体指针数数组(动态分配空间的问题)