我正在学习指针并制作一个小书店管理程序,如下所示,由于某些原因,当价格(浮动变量)被传递时,程序崩溃,如果我将其更改为int变量,它可以工作,什么是问题吗? 谢谢!
typedef struct
{
char name [20];
char author [20];
int year;
float price;
}book;
void data (book *info);
int main()
{
int n, i;
printf("Please enter current number of books: ");
scanf("%i", &n);
book lib[n];
for (i = 0; i < n; i++)
{
printf("\nData of book no.%i\n", i+1);
data (lib+i);
}
return 0;
}
void data (book *info)
{
printf("Please enter books name: ");
scanf("%s", (*info).name);
printf("Please enter books author: ");
scanf("%s", info->author);
printf("Please enter books publication date: ");
scanf("%i", info->year);
printf("Please enter books price: ");
scanf("%f", info->price);
}
答案 0 :(得分:1)
你应该使用
printf("Please enter books publication date: ");
scanf("%i", &info->year);
printf("Please enter books price: ");
scanf("%f", &info->price);
答案 1 :(得分:0)
您无法使用简单数组声明在运行时分配对象数组。也就是说,你不能从用户那里读取一个值并在那里创建一个N对象的数组,你应该使用malloc。
仅 C99 支持此功能。如果你在任何其他编译器上运行它,你的编译器应该显示错误。
至于你的问题,假设结构被正确声明
scanf 始终接受一个地址(指针在函数参数中等待地址)
在两个作者和名称的情况下,它是一个char数组,所以当你使用它的名字时默认传递地址
与第三和第四种情况一样,它不是,所以在变量前添加&amp; ,以便传递地址。