|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Justin1 于 2020-6-4 08:17 编辑
再用结构体指针写图书馆代码的时候,需要用到指针数组,且数组里的每一个元素都得指向结构体。
然后我写了一个代码- i = 0;
- char *p[n];
- while( i < n )
- {
- struct Book p[i];
- p[i] = (struct Book *)malloc(sizeof(struct Book));
复制代码
我的思路是这样子的
我需要一个指针数组,那么我先申明一个n个指针的数组(n的话已知,已经输入进去了)
然后进入循环 循环条件 为 i < n(后面代码是有 i +=1的 我闲啰嗦没贴)
好的接下来 p[i]是p数组的元素,也就是个指针 ,我让它指向结构体Book
之后,我用malloc申请一个大小和结构体一样大空间返回值为结构体指针的地址 并将它赋值给p[i]这个指针
但是我运行了程序
大概意思都是说类型不匹配
后来我对代码进行了一些修改,
改成了 struct Book *book[n];就可以运行了
这我就有点不理解了
第一次写的代码(有错)如下
- #include <stdio.h>
- #include <stdlib.h>
- //struct Date struct Book void getInput(*p) void PBooks(*p)
- struct Date
- {
- int year;
- int month;
- int day;
- }date;
- struct Book
- {
- char title[100];
- char author[40];
- float price;
- struct Date date;
- char publisher[100];
- };
- void getInput(struct Book *book);
- void PBooks(struct Book *book);
- void getInput(struct Book *book)
- {
- printf("请输入书名:");
- scanf("%s",book->title);
- printf("请输入作者:");
- scanf("%s",book->author);
- printf("请输入价格");
- scanf("%f",&book->price);
- printf("请输入出版日期");
- scanf("%d-%d-%d",&book->date.year,&book->date.month,&book->date.day);
- printf("请输入出版社");
- scanf("%s",book->publisher);
-
- }
- void PBooks(struct Book *book)
- {
- printf("书的名字是:%s",book->title);
- printf("书的作者是:%s",book->author);
- printf("书的价格是:%.2f",book->price);
- printf("书的出版日期是:%d-%d-%d",book->date.year,book->date.month,book->date.day);
- printf("书的出版社是:%s",book->publisher);
- }
-
- int main(void)
- {
- int n;
- int i = 0 ;
-
- printf("*请输入你要存放的书本的个数:");
- scanf("%d",&n);
-
- i = 0;
- char *p[n];
- while( i < n )
- {
- struct Book p[i];
- p[i] = (struct Book *)malloc(sizeof(struct Book));
- printf("这本书开始输入");
- if(p[i] == NULL)
- {
- printf("分配内存失败");
- exit(1);
- }
- getInput(p[i]);
- printf("*这本书输入完毕*");
- putchar('\n');
- printf("这本书开始打印:");
- PBooks(p[i]);
- printf("*这本书打印完毕*");
- free(p[i]);
- }
- putchar('\n');
-
- return 0;
- }
复制代码
这是修改后可以运行的代码
- #include <stdio.h>
- #include <stdlib.h>
- //struct Date struct Book void getInput(*p) void PBooks(*p)
- struct Date
- {
- int year;
- int month;
- int day;
- };
- struct Book
- {
- char title[100];
- char author[40];
- float price;
- struct Date date;
- char publisher[100];
- };
- void getInput(struct Book* book);
- void PBooks(struct Book* book);
- void getInput(struct Book* book)
- {
- printf("请输入书名:");
- scanf("%s", book->title);
- printf("请输入作者:");
- scanf("%s", book->author);
- printf("请输入价格");
- scanf("%f", &book->price);
- printf("请输入出版日期");
- scanf("%d-%d-%d", &book->date.year, &book->date.month, &book->date.day);
- printf("请输入出版社");
- scanf("%s", book->publisher);
- }
- void PBooks(struct Book* book)
- {
- printf("书的名字是:%s\n", book->title);
- printf("书的作者是:%s\n", book->author);
- printf("书的价格是:%.2f\n", book->price);
- printf("书的出版日期是:%d-%d-%d\n", book->date.year, book->date.month, book->date.day);
- printf("书的出版社是:%s\n", book->publisher);
- }
- int main(void)
- {
- int n;
- int i = 0;
- printf("*请输入你要存放的书本的个数:");
- scanf("%d", &n);
- while (i < n)
- {
- struct Book* book[i];
- book[i] = (struct Book*)malloc(sizeof(struct Book));
- printf("这本书开始输入");
- if (book[i] == NULL)
- {
- printf("内存分配失败");
- exit(1);
- }
- getInput(book[i]);
- printf("*这本书输入完毕*\n");
- putchar('\n');
- printf("这本书开始打印:\n");
- PBooks(book[i]);
- printf("*这本书打印完毕*\n");
- free(book[i]);
- i += 1;
- }
- putchar('\n');
- return 0;
- }
复制代码
本帖最后由 sunrise085 于 2020-6-3 22:31 编辑
修改前的程序,有个地方写错了。
while循环前,char*p[n]改为struct Book* p[n]就可以了。
类型写错了。
然后把第62行去掉
|
-
-
|