原代码如下
主要是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")吧
确实,改了后就不报错了,但是跟想象的好像还有点差别