传递结构体变量和结构体指针
运行到录完第一本书以后程序就结束了,问下各位大佬哪里出错了{:10_277:} #include <stdio.h>struct Date {
int year;
int month;
int day;
};
struct Book {
char title;
char author;
float price;
struct Date date;
char publisher;
};
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);
}
void printBook(struct Book book) {
printf("书名:%s\n", book.title);
printf("作者:%s\n", book.author);
printf("售价:%.2f\n", book.price);
printf("出版日期:%d-%d-%d", book.date.year, book.date.month, book.date.day);
printf("出版社:%s\n", book.publisher);
}
int main(void) {
struct Book b1, b2;
printf("请录入第一本书的信息:\n");
b1 = getInput(b1);
putchar('\n');
printf("请录入第二本书的信息:\n");
b2 = getInput(b2);
printf("\n\n录入完毕,现在开始检查。。。\n\n");
printf("打印第一本书的信息:\n");
printBook(b1);
putchar('\n');
printf("打印第二本书的信息:\n");
printBook(b2);
return 0;
} 你的函数传递的是一个变量不是指针 正确的做法是传递指针给函数 你的返回值也有问题不要返回在函数中定义的临时变量 因为他在函数退出时会被销毁 想要在函数中修改传入参数的值 应该传入他的指针
函数中被返回的变量应该是手动分配内存空间的变量 哦整错了是不要返回函数中指向临时变量的指针 函数退出后临时变量内存被销毁 返回的指针所指向的内存空间就没有意义了 要么通过接受返回值的方式 要么通过传入指针的方式
你这个两种方式都想要 本帖最后由 就是要努力呀 于 2021-4-20 10:10 编辑
void getInput(struct Book *book)
struct Book* getInput(void) 就是要努力呀 发表于 2021-4-20 10:07
要么通过接受返回值的方式 要么通过传入指针的方式
你这个两种方式都想要
了解了,我在函数上增加了返回值,还有在book定义的时候那个publisher定义错了{:10_277:},现在运行ok了,感谢
页:
[1]