C语言,结构体与函数,可以帮我看看代码的问题吗

原代码如下

img

img


我检查了好多次,我感觉应该没什么问题吧?
但是为什么输出结果是这样?

img


请各位帮我看看

主要是scanf的参数需要修改,如读取价格用%f更适合,而不用%.2f,然后打印价格那里不要用&,直接book.price就可以了,修改了一下,如下:


#include <stdio.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];
};

struct Book getinput(struct Book book);
void printbook(struct Book book);

struct Book 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);
    
    return book; 
}

void printbook(struct Book book){
    printf("\n书名:%s",book.title);
    printf("\n作者:%s",book.author);
    printf("\n价格:%.2f",book.price);
    printf("\n出版日期:%d-%d-%d",book.date.year,book.date.month,book.date.day);
    printf("\n出版社:%s",book.publisher);
}

int main(void){
    struct Book b1,b2;
    printf("请录入第一本书的信息···\n");
    b1=getinput(b1);
    putchar('\n');
    printf("请录入第二本书的信息···\n");
    b2=getinput(b2);
    putchar('\n');
    
    printf("打印第一本书···\n");
    printbook(b1); 
    putchar('\n');
    printf("打印第二本书···\n");
    printbook(b2); 
    putchar('\n');
    
    return 0; 
}

scanf("%.2f",&)有问题应该是scanf("%f")吧

确实,改了后就不报错了,但是跟想象的好像还有点差别

img


输入的时候,出版时间和出版社无法输入,输出的时候价格也成了乱码