鱼C论坛

 找回密码
 立即注册
查看: 2524|回复: 6

[已解决]传递结构体变量

[复制链接]
发表于 2019-8-5 16:12:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

执行程序时提示“使用了未初始化的局部变量”,这是什么错误呢?求大佬指点,谢谢!
最佳答案
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[128]    ;
        char author[40]    ;
        float price        ;
        struct Date date   ;
        char publisher[40] ;
}                          ;

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)                                 ;
}
捕获.PNG
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-5 16:28:39 | 显示全部楼层
贴出完整代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-5 16:32:24 | 显示全部楼层

已更新
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-5 17:07:30 | 显示全部楼层
52 和 55
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[128]    ;
        char author[40]    ;
        float price        ;
        struct Date date   ;
        char publisher[40] ;
}                          ;

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)                                 ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-6 09:28:37 | 显示全部楼层
本帖最后由 北郡 于 2019-8-6 09:32 编辑
jackz007 发表于 2019-8-5 18:34
结构体变量的赋值方法有问题,getInput() 传入的应该是结构体指针,在函数中直接为结构体的各个成员 ...


谢谢回答!传递结构体指针时这样做确实没错,但我问的是传递结构体变量时为什么会出错,这里定义的 getInput() 函数传递的参数是结构体变量,不是结构体指针。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-6 09:36:04 From FishC Mobile | 显示全部楼层
本帖最后由 jackz007 于 2019-8-6 09:59 编辑
北郡 发表于 2019-8-6 09:28
谢谢回答!传递结构体指针时这样确实没错,但我问的是传递结构体变量时为什么会出错。


      这正是问题的症结所在,因为 b1 = getInput() 并不能实现为结构体赋值的预期。所以,任何试图通过调用返回结构体的函数为结构变量赋值的操作都注定是错误和无效的。而通过向函数传递结构体指针进行赋值才是正确的途径和方法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-4 03:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表