|
发表于 2021-3-15 17:31:35
|
显示全部楼层
结构体的动态申请
#include <stdio.h>
#include <stdlib.h>
struct Date
{
int year;
int month;
int day;
};
struct Book
{
char title[128];
char author[40];
float price;
struct Date date;
char publisher[40];
} ;
void getInput(struct Book *book);
void printBook(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("%u-%u-%u",&book->date.year,&book->date.month,&book->date.day);
printf("请输入出版社:");
scanf("%s",book->publisher);
}
void printBook(struct Book *book)
{
printf("书名:%s",book->title);
printf("作者:%s",book->author);
printf("售价:%.2f",(*book).price);
printf("出版日期:%u-%u-%u",book->date.year,book->date.month,book->date.day);
printf("出版社:%s",book->publisher);
}
int main()
{
struct Book *b1 , *b2;
b1 = (struct Book *)malloc(sizeof(struct Book));
//强制转化成指向Book结构体的指针
b2 = (struct Book *)malloc(sizeof(struct Book));
if(b1 == NULL || b2 == NULL)
{
printf("内存分配失败!\n");
exit(1);
}
printf("请录入第一本书的信息...\n");
getInput(b1);
//因为b1,b2是指针,所以取地址运算符&就不用了
putchar('\n');
printf("请录入第二本书的信息...\n");
getInput(b2);
printf("\n已录入完毕\n");
printf("正在打印第一本书的信息...\n");
printBook(b1);
putchar('\n');
printf("正在打印第二本书的信息...\n");
printBook(b2);
putchar('\n');
free(b1);
free(b2);
}
|
|