c第44个视频传递结构体指针
#include <stdio.h>//事先定义结构体
struct Book
{
char title;
float price;
};
struct Book getInput(struct Book book);
void printBook(struct Book book);//为什么需要这个声明?
//而且输入和输出函数为什么类型还不一样?
//完成数据输入
void getInput(struct Book *book)
{
printf("请输入书名: ");
scanf("%s",book->title);
printf("请输入售价: ");
scanf("%f",&book->price);
}
//完成数据输出
void printBook(struct Book *book)
{
printf("书名:%s\n",book->title);
printf("售价:%f\n",book->price);
}
//主函数进行使用
int main()
{
struct Book b1,b2;//不应该定义为 struct Book *b1,*bk2吗?
printf("请录入第一本书的信息...\n");
getInput(&b1);//为什么传&b1过去,不应该传指针*b1过去吗?
putchar('\n');
printf("请输入第二本书的信息...\n");
getInput(&b2);
printf("\n\n录入完毕,现在开始打印验证...\n\n");
printf("打印第一本书的信息是...\n");
printBook(&b1);
putchar('\n');
printf("打印第二本书的信息是:...\n");
printBook(&b2);
return 0;
}
问题如注释,请高手指点,谢谢! struct Book getInput(struct Book book);
void printBook(struct Book book);//为什么需要这个声明?
//而且输入和输出函数为什么类型还不一样?
完全不需要这两个声明,写了这两个声明反而是错的
$ cat main.c
#include <stdio.h>
//事先定义结构体
struct Book
{
char title;
float price;
};
struct Book getInput(struct Book book);
void printBook(struct Book book);//为什么需要这个声明?
//而且输入和输出函数为什么类型还不一样?
//完成数据输入
void getInput(struct Book *book)
{
printf("请输入书名: ");
scanf("%s",book->title);
printf("请输入售价: ");
scanf("%f",&book->price);
}
//完成数据输出
void printBook(struct Book *book)
{
printf("书名:%s\n",book->title);
printf("售价:%f\n",book->price);
}
//主函数进行使用
int main()
{
struct Book b1,b2;//不应该定义为 struct Book *b1,*bk2吗?
printf("请录入第一本书的信息...\n");
getInput(&b1);//为什么传&b1过去,不应该传指针*b1过去吗?
putchar('\n');
printf("请输入第二本书的信息...\n");
getInput(&b2);
printf("\n\n录入完毕,现在开始打印验证...\n\n");
printf("打印第一本书的信息是...\n");
printBook(&b1);
putchar('\n');
printf("打印第二本书的信息是:...\n");
printBook(&b2);
return 0;
}
$ gcc-debug -o main main.c
main.c:15:6: error: conflicting types for ‘getInput’; have ‘void(struct Book *)’
15 | void getInput(struct Book *book)
| ^~~~~~~~
main.c:9:13: note: previous declaration of ‘getInput’ with type ‘struct Book(struct Book)’
9 | struct Book getInput(struct Book book);
| ^~~~~~~~
main.c:23:6: error: conflicting types for ‘printBook’; have ‘void(struct Book *)’
23 | void printBook(struct Book *book)
| ^~~~~~~~~
main.c:10:6: note: previous declaration of ‘printBook’ with type ‘void(struct Book)’
10 | void printBook(struct Book book);//为什么需要这个声明?
| ^~~~~~~~~
$ 人造人 发表于 2021-12-12 18:25
完全不需要这两个声明,写了这两个声明反而是错的
这是小甲鱼视频里有的,但我也觉得没有必要
页:
[1]