【发布时间】:2016-11-20 06:36:44
【问题描述】:
我是 C 的新手,我正在研究这个基础项目,以帮助我解决问题......所以,如果我的代码看起来仍然有点愚蠢,请多多包涵。
话虽如此,我在使用打印结构成员的功能时遇到了问题。 我创建了一个函数来注册书籍详细信息,并创建了一个单独的函数来打印所述详细信息。
如果我在 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);
}
我得到的是:
标题?一个
作者?二
ISBN?3
主题?四
标题:ç 作者:` ISBN:6356340 主题:Ç@ Title?five
作者?六
ISBN?7
主题?八
标题:&Ý=w¬8wÝ=wÃÊpï 作者:ISBN:6356340 主题:
有人可以建议吗?
【问题讨论】:
-
从 registerBook 中的 scanf 函数中删除 &s。该函数需要一个与数组具有相同值的 char *。
-
您好,感谢您的快速回复,奥尔登。不幸的是,对于 printBook(),它保持不变。
-
谢谢,我试过了,但我仍然得到与输出相同的字符。例如,如果我在 registerBook(); 中打印 a.title,它会正确打印。但是当我尝试在 main 中 printf 时,它给出的“垃圾”与 printBook(); 完全相同。
-
发布代码的第一部分,在函数之前:
main()既定义了一个结构又声明了该结构的一个实例(不幸的是,它使用与结构相同的名称。)结构的实例是完全不必要的,应该被删除。 -
在传递参数时,传递整个结构体是一种非常糟糕的编程习惯。只需将指针传递给结构然后编写子函数以期望指向结构而不是整个结构的指针并访问结构的字段,离开该指针
标签: c function struct printf garbage