gpt4 book ai didi

c - 我不能在结构中存储整数

转载 作者:太空宇宙 更新时间:2023-11-04 08:18:34 25 4
gpt4 key购买 nike

我创建了一个具有属性的结构书。我让用户使用 for-loop 创建结构对象。比如 Books[i] Books1、Books2 等...

问题是我不能在结构中存储整数值。

代码如下。

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


struct Book {
int ID[];
char book_name[80];
char author_name[50];
int pblsh_date[];
};
struct Book *Books;

void Create();

int main() {
int count;
printf("How many books do you want to enter? ");
scanf("%d", &count);


Create(count);

//Show
printf("ID\t\tName\tAuthor\tPublish Year\n");
for (int i= 0; i < count; i++)
printf("%d\t%s\t%s\t%d\n", Books[i].ID, Books[i].book_name, Books[i].author_name, Books[i].pblsh_date);

if (Books) {
free(Books);
}
getchar();
return 0;
}

void Create(int count) {

Books = (struct Book*) malloc(count * sizeof(struct Book));
int i;
for (i = 0; i < count; i++) {

printf("%d. Book's ID: ", i+1);
scanf("%d", Books[i].ID);

printf("Book's name: ");
scanf("%s", Books[i].book_name);

printf("Author: ");
scanf("%s", Books[i].author_name);

printf("Publish Year: ");
scanf("%d", Books[i].pblsh_date);

}
}

最佳答案

您发布的结构定义包含两个空数组:int ID[];int pblsh_date[]; .由于您没有指定大小并且编译器没有抛出错误,因此它没有为数组数据分配任何存储空间:数组的长度为零,当您 scanf 时,您正在覆盖它们后面的数据。进入他们。

由于您只需要一个整数,因此定义结构的正确方法是

struct Book {
int ID;
char book_name[80];
char author_name[50];
int pblsh_date;
};

您需要对程序进行的唯一其他更改是 scanf 的参数。 : scanf("%d", &(Books[i].ID));scanf("%d", &(Books[i].pblsh_date)); .原因是 scanf需要您要放置结果的地方的地址。同时 scanf("%s", Books[i].book_name);按原样工作,您需要添加 &接线员到 int变量。 book_name是一个数组,在 C 中被视为包含要写入的缓冲区地址的指针。 ID是一个 int,所以你需要得到它的地址才能知道写到哪里。请注意您在 main 中是如何做到这一点的与 scanf("%d", &count); .

关于c - 我不能在结构中存储整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34357050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com