video 44图书馆(指针版本)
video44 构建图书馆m,每个元素指向一个动态申请架构体变量的指针。
#include <stdio.h> //上面程序的结构体指针
struct Date;//声明
struct Date{
int year;
int month;
int day;
}date;
struct Book;//声明
struct Book{
char title[128];
char author[40];
float price;
struct Date date;
char publisher[40];
}book;
void getInput(struct Book *book);//声明,与非指针版本不同,不用返回值。因为直接通过指针就能修改数据,所以定义为void即可
void getInput(struct Book *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 printBook(struct Book *book);
void printBook(struct Book *book)
{ //结构体整体做参数,就要定义出一个结构体x的形式出来
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)
{
struct Book b1, b2;//定义两个空结构体
printf("请录入第一本书的书名\n");
getInput(&b1);//给一个地址,直接在上面修改得到新的结构体
putchar('\n');
printf("请录入第二本书的书名\n");
getInput(&b2);
putchar('\n');
printf("录入完毕,打印第一本书的信息\n");
printBook(&b1);//打印结构体
putchar('\n');
printf("现在,打印第二本书的信息\n");
printBook(&b2);
// free(b1);
// free(b2);
return 0;
}