鱼C论坛

 找回密码
 立即注册
查看: 2209|回复: 1

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

[复制链接]
发表于 2020-6-14 14:35:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
就是创建一个图书馆的问题
//刚学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[128];
   char publisher[40];
   char author[40];
   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[10];
        //int length=(sizeof(book)/sizeof[0]);
        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[i]=&ptr[i];
        }
       
       
        printf("welcome to 龙大大的图书馆\n");
        printf("龙大大目前的图书为:\n");
        for(i=0;i<n;i++)
        {
          printf("书名:");
          printf("%s",ptr[i]->name);
          putchar('\n');
          printf("出版社:");
          printf("%s",book[i]->publisher);
          putchar('\n');
          printf("作者:");
          printf("%s",book[i]->author);
          putchar('\n');
          printf("发行日期:");
          printf("%d-%d-%d",book[i]->data.year,book[i]->data.month,book[i]->data.day);
          putchar('\n');
          printf("价格:");
          printf("%.1f",book[i]->price);       
          putchar('\n');
        }
       
        return 0;
       
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-14 00:25:23 | 显示全部楼层
1.你的ptr就已经可以遍历到所有结构体了,没要再定义一个book指针
2.第一个for 循环你的ptr一直停留在原地,你应该让ptr每次向后移动
建议:你可以将输入输出功能封装成函数,可以让你的代码看起来更舒服,有条理一些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 17:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表