waixiong 发表于 2021-12-12 18:21:57

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;
}
问题如注释,请高手指点,谢谢!

人造人 发表于 2021-12-12 18:25:58

struct Book getInput(struct Book book);
void printBook(struct Book book);//为什么需要这个声明?
                                 //而且输入和输出函数为什么类型还不一样?

完全不需要这两个声明,写了这两个声明反而是错的

人造人 发表于 2021-12-12 18:27:02

$ 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);//为什么需要这个声明?
      |      ^~~~~~~~~
$

waixiong 发表于 2021-12-15 22:50:31

人造人 发表于 2021-12-12 18:25
完全不需要这两个声明,写了这两个声明反而是错的

这是小甲鱼视频里有的,但我也觉得没有必要
页: [1]
查看完整版本: c第44个视频传递结构体指针