尝试使用函数中的指针传递浮点值时程序崩溃

时间:2014-02-01 15:47:21

标签: c function pointers

我正在学习指针并制作一个小书店管理程序,如下所示,由于某些原因,当价格(浮动变量)被传递时,程序崩溃,如果我将其更改为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);
}

2 个答案:

答案 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; ,以便传递地址。