c中输入输出结构函数错误

时间:2017-07-30 23:38:14

标签: c function struct

此代码应阅读图书信息,然后打印信息,但我在函数中遇到错误void in_book(struct books z)void out_book(struct books z)

#include <stdio.h>

struct books{
int id;
float price;
char title[15];
char description[140];
};

void in_book(struct books z){
printf("Enter the title\n");
gets(z.title);
printf("Enter the description\n");
gets(z.description);
printf("Enter the id\n");
scanf("%d",&z.id);
printf("Enter the price\n");
scanf("%f",&z.price);
}

void out_book(struct books z){
printf("Title       : %s\n",z.title);
printf("Description : %s\n",z.description);
printf("Id          : %d\n",z.id);
printf("Price       : %.1f\n",z.price);
}

void main(){
struct books b1;
in_book(b1);
out_book(b1);
}

这是输出

  

输入标题
    书
    输入说明
    一本书     输入ID
    1234
    输入价格
    55
    标题:
    说明:
    Id:0
    价格:0.0

2 个答案:

答案 0 :(得分:1)

您正在以按值调用方式分配结构的每个字段的值,这意味着更改仅在每个函数中可见。如果要设置值以使main函数中的struct保存所有更改,则需要指向结构的指针:

struct books *b1 = malloc(sizeof(struct books));

然后传过指针:

in_book(b1);
out_book(b1);

修改功能如下:

void in_book(struct books *z){
    printf("Enter the title\n");
    gets(z->title);
    printf("Enter the description\n");
    gets(z->description);
    printf("Enter the id\n");
    scanf("%d",&z->id);
    printf("Enter the price\n");
    scanf("%f",&z->price);
}

void out_book(struct books *z){
    printf("Title       : %s\n",z->title);
    printf("Description : %s\n",z->description);
    printf("Id          : %d\n",z->id);
    printf("Price       : %.1f\n",z->price);
}

修改

此外,您应该查看主题&#34; 按值调用&#34;以及&#34; 按引用拨打&#34;。

答案 1 :(得分:-1)

你需要创造menmory

struct books *b1 = malloc(sizeof(struct books))