#include <stdio.h>
typedef struct pduct {char name[20];
int price;
int stock;} PRODUCT;
void init(PRODUCT * product)
{
printf("What is the name of the product: ");
fgets(product->name, 20, stdin);
printf("DEBUG: Did it get written...: %s", product->name);
printf("What is the current stock of the item: ");
scanf("%d", product->stock);
printf("What is the price of the new item: ");
scanf("%d", product->price);
}
int main()
{
PRODUCT products[5];
init(products);
return 0;
}
现在,我真的有点失落。运行时,它将询问产品的名称,打印出来,因此我知道它存储了它,然后询问库存量,它将崩溃并返回-1。
我不知道出了什么问题。我已经尝试用fgets
替换scanf
,只是为了确定,但同样的事情发生了。我猜我的struct
设置错了,但我不知道怎么做。可能是char
数组吗?此外,无论我如何安排它,它始终是第二个输入。那么为什么第一个工作得那么好呢?
感谢您的帮助!
答案 0 :(得分:10)
我可以看到的一个快速错误&
中缺少scanf
。
scanf("%d", &product->stock);
^
scanf("%d", &product->price);
^
编译器警告你这样的错误:
warning: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘int’
不要忽略编译器警告。
答案 1 :(得分:1)
您需要传递product->stock
的地址。那就是:
scanf("%d", &product->stock);
答案 2 :(得分:1)
scanf获取指向存储结果的位置的指针。在这种情况下,您使用当前(未初始化)的stock值作为scanf结果写入位置的地址。你需要说scanf("%d", &product->stock)
等等。