小甲鱼 发表于 2017-3-16 03:38:03

已有 25 人购买  本主题需向作者支付 5 鱼币 才能浏览 购买主题

Natory_pu 发表于 2021-3-15 17:31:35

结构体的动态申请
#include <stdio.h>
#include <stdlib.h>

struct Date
{
int year;
int month;
int day;
};

struct Book
{
char title;
char author;
float price;
struct Date date;
char publisher;
} ;

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);

}

八戒253 发表于 2021-3-16 19:22:54

好你个小猪猪,臭猪猪,朱然这么懒,我的强迫症都要犯了。

八戒253 发表于 2021-3-16 19:24:26

Natory_pu 发表于 2021-3-15 17:31
结构体的动态申请
#include
#include


老哥有点强啊啊!!!!!!!!

Puppet16 发表于 2022-5-5 15:19:49

好好学习才能天天向上!

Anzai0752 发表于 2022-11-18 21:35:11

他那个用指针指向结构体变量为什么出版日期那年月日会乱码?有大佬能解答一下吗,代码是和小甲鱼的一样的

Anzai0752 发表于 2022-11-18 21:38:06

Anzai0752 发表于 2022-11-18 21:35
他那个用指针指向结构体变量为什么出版日期那年月日会乱码?有大佬能解答一下吗,代码是和小甲鱼的一样的
...

请输入售价:9.9
请输入出版日期:20221111
请输入出版社:清华大学出版社

请问是否需要录入图书信息(Y/N):N


录入完毕,现在开始打印验证...

书名:带你学习带你飞
作者:小甲鱼
售价:9.90
出版日期:20221111-1966952527-1717920878
出版社:清华大学出版社

Sherry笑 发表于 2023-1-5 15:37:46

终于有源代码了!感谢!

小坛砸 发表于 2025-8-12 15:00:45

小甲鱼程序有bug啊,,,
第2个小标题中代码getInput函数定义和声明不一致,两个函数的参数也没有加*
#include <stdio.h>

struct Date
{
      int year;
      int month;
      int day;
};

struct Book
{
      char title;
      char author;
      float price;
      struct Date date;
      char publisher;
};

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("%d-%d-%d", &book->date.year, &book->date.month, &book->date.day);
      printf("请输入出版社:");
      scanf("%s", book->publisher);
}

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(void)
{
      struct Book b1, b2;

      printf("请录入第一本书的信息...\n");
      getInput(&b1);
      putchar('\n');
      printf("请录入第二本书的信息...\n");
      getInput(&b2);

      printf("\n\n录入完毕,现在开始打印验证...\n\n");
      printf("打印第一本书的信息...\n");
      printBook(&b1);
      putchar('\n');
      printf("打印第二本书的信息...\n");
      printBook(&b2);

      return 0;
}
页: [1]
查看完整版本: S1E44:传递结构体变量和结构体指针