很难用函数打印结构成员
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;
}
我没有包括你的退出循环,因为它与你这里的问题无关。
我是 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;
}
我没有包括你的退出循环,因为它与你这里的问题无关。