从函数传递和返回结构

时间:2017-03-29 18:27:57

标签: c

我有一个带有书结构数组的函数,但是当我尝试将它返回到我的main时,它不会返回值并将它们存储在数组中。如果addBook函数必须无效,我将如何解决这个问题,以便以后可以访问数组元素。

TypeNameHandling

2 个答案:

答案 0 :(得分:1)

由于addBook的函数签名表示返回void,因此您的返回语句不会执行您想要的操作。令我感到惊讶的是,实际编译的代码没有关于此的错误。

无论如何,书籍数据可以从传入的方式返回 - 作为输入和输出参数。

基本上你的代码可能如下所示(这只是一个编译代码的例子,用于将标准输入中输入的信息保存到本书中):

#include <stdio.h>

struct Book {
    int value;
};

#define MAX_BOOKS 2

void addBook(struct Book book[], int *size) {
    if (*size == MAX_BOOKS) {
        printf("The inventory is full\n");
    }
    else {
        printf("Value:");
        scanf("%d", &book[*size].value);
        (*size)++;
        printf("The book is successfully added to the inventory.\n");
    }
}

int main(void) {
    struct Book book[MAX_BOOKS];
    int size = 0;

    addBook(book, &size);
    printf("Book 1: Value=%d\n", book[0].value);
}

这是运行时的样子:

$ ./main
Value:9
The book is successfully added to the inventory.
Book 1: Value=9

希望这能回答你的问题。

答案 1 :(得分:0)

我认为你的问题在*size++;行。您应该使用括号,否则您正在修改指向大小的指针,而不是值。它应该是(*size)++。 此外,addBook函数不应返回任何内容,因为它是无效的,并且它已经在更改数组的内容。