Zzq233 发表于 2021-5-29 21:39:15

结构体指针

#include <stdio.h>

struct Date
{
        int year;
        int month;
        int day;
};
struct Book
{
        char name;
        char author;
        float price;
        struct Date date;       
};//书籍结构体

void getbook(struct Book *);
void printbook(struct Book *);

void getbook(struct Book *book)
{
        printf("请输入书名:\n");
        scanf("%s",book->name);
        printf("请输入作者:\n");
        scanf("%s",book->author);
        printf("请输入价格:\n");
        scanf("%f",&book->price);
        printf("请输入日期:\n");
        scanf("%d-%d-%d",&book->date.year,&book->date.month,&book->date.day);
}//输入书籍信息
void printbook(struct Book *book)
{
        printf("书名为:%s\n",book->name);
        printf("作者为:%s\n",book->author);
        printf("价格为:%f\n",book->price);
        printf("日期为:%d-%d-%d\n",book->date.year,book->date.month,book->date.day);
}//输出书籍信息
int main()
{
        struct Book *pb;
       
        getbook(pb);
        printbook(pb);
       
        return 0;
}

为什么无法正常运行?谢谢大佬。

wp231957 发表于 2021-5-29 21:50:53

没有空间啊,你输入这些东西没地方放啊

Zzq233 发表于 2021-5-29 22:08:03

wp231957 发表于 2021-5-29 21:50
没有空间啊,你输入这些东西没地方放啊

没懂。要怎么改?

人造人 发表于 2021-5-29 22:16:54

Zzq233 发表于 2021-5-29 22:08
没懂。要怎么改?

改法一
#include <stdio.h>
#include <stdlib.h>

struct Date
{
    int year;
    int month;
    int day;
};
struct Book
{
    char name;
    char author;
    float price;
    struct Date date;      
};//书籍结构体

void getbook(struct Book *);
void printbook(struct Book *);

void getbook(struct Book *book)
{
    printf("请输入书名:\n");
    scanf("%s",book->name);
    printf("请输入作者:\n");
    scanf("%s",book->author);
    printf("请输入价格:\n");
    scanf("%f",&book->price);
    printf("请输入日期:\n");
    scanf("%d-%d-%d",&book->date.year,&book->date.month,&book->date.day);
}//输入书籍信息
void printbook(struct Book *book)
{
    printf("书名为:%s\n",book->name);
    printf("作者为:%s\n",book->author);
    printf("价格为:%f\n",book->price);
    printf("日期为:%d-%d-%d\n",book->date.year,book->date.month,book->date.day);
}//输出书籍信息
int main()
{
    struct Book *pb = malloc(sizeof(*pb));

    getbook(pb);
    printbook(pb);
    free(pb);
    return 0;
}


改法二
#include <stdio.h>
#include <stdlib.h>

struct Date
{
    int year;
    int month;
    int day;
};
struct Book
{
    char name;
    char author;
    float price;
    struct Date date;      
};//书籍结构体

void getbook(struct Book *);
void printbook(struct Book *);

void getbook(struct Book *book)
{
    printf("请输入书名:\n");
    scanf("%s",book->name);
    printf("请输入作者:\n");
    scanf("%s",book->author);
    printf("请输入价格:\n");
    scanf("%f",&book->price);
    printf("请输入日期:\n");
    scanf("%d-%d-%d",&book->date.year,&book->date.month,&book->date.day);
}//输入书籍信息
void printbook(struct Book *book)
{
    printf("书名为:%s\n",book->name);
    printf("作者为:%s\n",book->author);
    printf("价格为:%f\n",book->price);
    printf("日期为:%d-%d-%d\n",book->date.year,book->date.month,book->date.day);
}//输出书籍信息
int main()
{
    struct Book pb;

    getbook(&pb);
    printbook(&pb);
    return 0;
}

万千只cnm 发表于 2021-5-29 23:01:22

struct Book *pb;
指针没初始化啊
要申请空间    用malloc,返回一个指针 赋值给pb
然后指针才能指向开辟的空间 ,才能存数据
https://fishc.com.cn/forum.php?mod=viewthread&tid=78842&extra=page%3D1%26filter%3Dtypeid%26typeid%3D583

Zzq233 发表于 2021-5-30 10:10:30

谢谢大佬们。
页: [1]
查看完整版本: 结构体指针