很难打印具有函数

时间:2016-07-17 16:27:58

标签: c function struct printf garbage

我是C的新手,我正在研究这个基础项目,以帮助我解决问题......所以,如果我的代码看起来仍然很愚蠢,请耐心等待。

话虽这么说,我在使用函数来打印struct成员时遇到了麻烦。 我已经创建了一个注册书籍详细信息的功能和一个用于打印所述详细信息的单独功能。

如果我在registerBook功能中打印细节,它们将被正确打印。

然而,当我调用printBook方法时,我得到的只是“垃圾”。而且它总是相同的字符,

代码如下:

#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);
}

我得到的只是:

  

名称?一个

     

作者?2

     

ISBN?3

     

主题?4

     

标题:ç作者:`ISBN:6356340主题:Ç@ Title?five

     

作者?6

     

ISBN?7

     

主题?8

     

标题:&amp;Ý= w-8wÝ=wÃÊpï作者:ISBN:6356340主题:

有人可以提出建议吗?

1 个答案:

答案 0 :(得分:0)

在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;
}

我没有包含您的退出循环,因为它与您的问题无关。