北郡 发表于 2019-8-5 16:12:36

传递结构体变量

本帖最后由 北郡 于 2019-8-6 09:34 编辑

执行程序时提示“使用了未初始化的局部变量”,这是什么错误呢?求大佬指点,谢谢!

jackz007 发表于 2019-8-5 16:28:39

贴出完整代码

北郡 发表于 2019-8-5 16:32:24

jackz007 发表于 2019-8-5 16:28
贴出完整代码

已更新

micolar 发表于 2019-8-5 17:07:30

52 和 55

jackz007 发表于 2019-8-5 18:34:57

       结构体变量的赋值方法有问题,getInput() 传入的应该是结构体指针,在函数中直接为结构体的各个成员赋值,不用再返回结构体了。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Date
{
      int year;
      int month ;
      int day   ;
}               ;

struct Book
{
      char title    ;
      char author    ;
      float price      ;
      struct Date date   ;
      char publisher ;
}                        ;

void 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("售价:%f\n" , book . price)                                                                ;
      printf("出版日期:%4d-%02d-%02d\n" , book . date . year , book . date . month , book . date . day) ;
      printf("出版社:%s\n" , book . publisher)                                                          ;
}

int main(void)
{
      struct Book b1 , b2                           ;

      printf("请输入第一本书的信息...\n")         ;
      getInput(& b1)                              ;
      putchar('\n')                                 ;
      printf("请输入第二本书的信息...\n")         ;
      getInput(& b2)                              ;

      printf("\n录入完毕,现在开始打印验证...\n\n") ;
      printf("打印第一本书的信息\n")                ;
      printBook(b1)                                 ;
      printf("打印第二本书的信息\n")                ;
      printBook(b2)                                 ;
}

北郡 发表于 2019-8-6 09:28:37

本帖最后由 北郡 于 2019-8-6 09:32 编辑

jackz007 发表于 2019-8-5 18:34
结构体变量的赋值方法有问题,getInput() 传入的应该是结构体指针,在函数中直接为结构体的各个成员 ...

谢谢回答!传递结构体指针时这样做确实没错,但我问的是传递结构体变量时为什么会出错,这里定义的 getInput() 函数传递的参数是结构体变量,不是结构体指针。

jackz007 发表于 2019-8-6 09:36:04

本帖最后由 jackz007 于 2019-8-6 09:59 编辑

北郡 发表于 2019-8-6 09:28
谢谢回答!传递结构体指针时这样确实没错,但我问的是传递结构体变量时为什么会出错。

      这正是问题的症结所在,因为 b1 = getInput() 并不能实现为结构体赋值的预期。所以,任何试图通过调用返回结构体的函数为结构变量赋值的操作都注定是错误和无效的。而通过向函数传递结构体指针进行赋值才是正确的途径和方法。
页: [1]
查看完整版本: 传递结构体变量