很难用函数打印结构成员

Hard time printing struct members with a function

我是 C 的新手,我在研究它的同时正在开发这个基本项目,以帮助我解决问题...如果我的代码看起来仍然有点愚蠢,请多多包涵。

也就是说,我在使用打印结构成员的函数时遇到了问题。 我创建了一个功能来注册书籍详细信息,并创建了一个单独的功能来打印所述详细信息。

如果我在 registerBook 函数中打印详细信息,它们会正确打印。

然而,当我调用方法 printBook 时,我得到的只是 "garbage"。而且总是相同的字符,

代码如下:


#include <stdio.h>
#include <stdlib.h>

struct Books {
    char title[30];
    char author[20];
    int book_id[10];
    char subject[50];
} Books;

int main() {

    struct Books Book1;
    struct Books Book2;

    registerBook(Book1);
    printBook(Book1);
    registerBook(Book2);
    printBook(Book2);

    int exit = 0;
    while(exit == 0) {
        scanf("%p", exit);
    }

    return 0;
}

void printBook(struct Books a){
    printf("\nTitle: %s", a.title);
    printf("\nAuthor: %s", a.author);
    printf("\nISBN: %d", a.book_id);
    printf("\nSubject: %s", a.subject);
}

void registerBook(struct Books a){
    printf("\nTitle?");
    scanf("%s", &a.title);
    printf("\nAuthor?");
    scanf("%s", &a.author);
    printf("\nISBN?");
    scanf("%d", &a.book_id);
    printf("\nSubject?");
    scanf("%s", &a.subject);
}

我得到的是:


Title?one

Author?two

ISBN?3

Subject?four

Title: ç Author: ` ISBN: 6356340 Subject: Ç@ Title?five

Author?six

ISBN?7

Subject?eight

Title: &Ý=w¬8wÝ=wÃÊpï Author: ISBN: 6356340 Subject:


有人可以指点一下吗?

在 registerBook 函数中,您应该通过引用而不是值传递参数,这样您可以在函数结束后保留​​更改。

#include <stdio.h>
#include <stdlib.h>

struct Books {
    char title[30];
    char author[20];
    int book_id;
    char subject[50];
} Books;

void printBook(struct Books a){
    printf("\nTitle: %s", a.title);
    printf("\nAuthor: %s", a.author);
    printf("\nISBN: %d", a.book_id);
    printf("\nSubject: %s", a.subject);
}

void registerBook(struct Books* a){
    printf("\nTitle?");
    scanf(" %s", a->title);
    printf("\nAuthor?");
    scanf(" %s", a->author);
    printf("\nISBN?");
    scanf(" %d", &a->book_id);
    printf("\nSubject?");
    scanf(" %s", a->subject);
}



int main() {

    struct Books Book1;
    struct Books Book2;

    registerBook(&Book1);
    printBook(Book1);
    registerBook(&Book2);
    printBook(Book2);


    return 0;
}

我没有包括你的退出循环,因为它与你这里的问题无关。