我正在学习C语言,对此有麻烦。它确实可以编译,但是结果出乎意料。在我的代码中,我有一个结构:
typedef struct {
char *title[50];
float price;
} Book;
主要是向用户询问他们希望在图书馆中拥有的书籍数量。然后让他们初始化每本书的属性。最后,使用Display
功能将它们打印到终端。
void Display(Book* lib, int n);
int main() {
int n;
printf("Enter the number of books:\n" );
scanf("%d", &n);
if(n <= 0) {
printf("Invalid number of book.");
return 1;
}
Book *lib = (Book *) malloc(n * sizeof(Book));
if(lib == NULL) {
printf("The memory is full");
return 1;
}
for(int i = 0; i < n; ++i) {
char title[50];
float price;
printf("Book no.%d\n", i);
printf("Book Title: ");
scanf("%s", title);
printf("Book Price: ");
scanf("%f", &price);
printf("\n");
*(lib+i)->title = title;
(lib+i)->price = price;
}
Display(lib, n);
return 0;
}
代码成功编译,但是结果是这样的:
Enter the number of books:
2
Book no.0
Book Title: AAAA
Book Price: 1.0
Book no.1
Book Title: BBBB
Book Price: 9.9
----Displaying----
Book no.0
Book Title: BBBB
Book Price: $1.000000
Book no.1
Book Title: BBBB
Book Price: $9.900000
第一本书的标题是错误的,它是第二本书的标题。为什么会这样?我该如何解决?谢谢
编辑:我的分配条件之一是Book
的标题必须为char*
]类型>
Edit 2
:我现在有50个char类型的指针时意识到了我的错误。我应该如何解决?我正在学习C语言,对此有麻烦。它确实可以编译,但是结果出乎意料。在我的代码中,我有一个结构:typedef struct {char * title [50];浮动价格; }书;在...
在您的结构定义中:
结构的数据成员title
的声明
如果必须使用指针,则需要使用动态分配。