# include<stdio.h>
/*struct Test
{ int x;
int y;
}t1,t2;
t1.x=3;
t1.y=4;
t2=t1;
printf("t2.x=%d t1.y=%d",t2.x,t1.y);
return 0;*/
//可以直接赋值,但要类型相同
/* struct Date
{
int year;
int month;
int day;
};
struct Book
{
char title[100];
char author[100];
float price;
struct Date date;//结构体件套
char publisher[40];
};
struct Book getInput(struct Book book);//申明好习惯
void printBook(struct Book book);//申明
struct Book 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);
return book;
}
void printBook(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()
{
struct Book b1,b2;
printf("\n\n请录入第一本书信息……\n");
b1=getInput(b1);//b1是实参 实参传递给形参
putchar('\n');
printf("请录入第二本书信息……\n");
b2=getInput(b2);
printf("\n\n信息录入完毕,现在开始打印验证……\n");
printf("打印第一本的信息……");
putchar('\n') ;
printBook(b1);
printf("打印第二本的信息……\n");
printBook(b2);
return 0;
} */
//修改以上代码 传递指向结构体变量的指针 一切为了效率
/*
struct Date
{
int year;
int month;
int day;
};
struct Book
{
char title[100];
char author[100];
float price;
struct Date date;//结构体件套
char publisher[40];
};
void getInput(struct Book *book);//申明好习惯
void printBook(struct Book *book);//申明
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);
//return book; 通过指针直接修改不需要返回值
}
void printBook(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()
{
struct Book b1,b2;
printf("\n\n请录入第一本书信息……\n\n");
getInput(&b1);//b1是实参 实参传递给形参 原本是b1=getInput(b1);现在直接传地址
putchar('\n');
printf("请录入第二本书信息……\n\n");
getInput(&b2);
printf("\n\n信息录入完毕,现在开始打印验证……\n");
printf("打印第一本的信息……\n\n");
putchar('\n\n') ;
printBook(&b1); //打印也是扔一个地址进去
printf("打印第二本的信息……\n");
printBook(&b2);
return 0;
}*/
/*请录入第一本书信息……
请输入书名:karry
请输入作者:sky
情输入售价:34
请输入日期:2022-3-24
请输入出版社:sdsfdx
请录入第二本书信息……
请输入书名:hello
请输入作者:sky
情输入售价:56
请输入日期:2022-3-24
请输入出版社:sdsfdx
信息录入完毕,现在开始打印验证……
打印第一本的信息……
书名:karry
作者:sky
售价:34.00
出版日期:2022-3-24
出版社:sdsfdx
打印第二本的信息……
书名:hello
作者:sky
售价:56.00
出版日期:2022-3-24
出版社:sdsfdx
*/
//动态申请结构体 调用malloc 为函数分配存储空间
//so 还可以改进代码 ,直接修改main 函数
# include<stdlib.h> //下面出现exit
struct Date
{
int year;
int month;
int day;
};
struct Book
{
char title[100];
char author[100];
float price;
struct Date date;//结构体件套
char publisher[40];
};
void getInput(struct Book *book);//申明好习惯
void printBook(struct Book *book);//申明
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);
//return book; 通过指针直接修改不需要返回值
}
void printBook(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()
{
struct Book *b1,*b2;//加了*号
b1=(struct Book*)malloc(sizeof(struct Book)); //molloc 默认返回void 所以要强制类型转换
b2=(struct Book*)malloc(sizeof(struct Book));
if (b1==NULL||b2==NULL)
{printf("内存分配失败!\n");
exit(1);//执行 exit需要一个头文件 # include <stdlib>
}
printf("\n\n请录入第一本书信息……\n\n");
getInput(b1);//b1,b2现在是指针去掉&
putchar('\n');
printf("请录入第二本书信息……\n\n");
getInput(b2);
printf("\n\n信息录入完毕,现在开始打印验证……\n");
printf("打印第一本的信息……\n\n");
putchar('\n\n') ;
printBook(b1); //打印也是扔一个地址进去
printf("打印第二本的信息……\n");
printBook(b2);
free(b1);
free(b2); //最后释放又来有去
return 0;
}