void print(part *item, int part_count) {
int i=0;
for (i=0; i<part_count; i++) {
printf("Item number: %d\n", i + 1);
printf("Item name: %s\n", item[i].name);
printf("Item price: $%f\n", item[i].price);
printf("Item quantity: %d\n", item[i].quantity);
}
}
我想打印使用不同功能创建的结构数组。我看了但是还没有找到一种不同的方式来打印它们或者我在打印语句中做错了什么。我的程序编译但在运行时崩溃。
好的,知道问题不在这些陈述中是很好的。那令我沮丧。这是添加功能。
void add(part *item, int *part_count)
{
if (!item)
{
item = malloc(sizeof(part));
}
item = realloc(item, sizeof(part) * *part_count + 1);
item[*part_count].name = malloc(sizeof(char)*64); // max of 64 characters
printf("Please enter item name: ");
scanf("%65s", item[*part_count].name);
printf("Please enter item price: ");
scanf("%f", &item[*part_count].price);
printf("Please enter item quantity: ");
scanf("%d", &item[*part_count].quantity);
*part_count = *part_count+ 1;
}
答案 0 :(得分:1)
item
,作为add
的参数是该函数的本地参数。因此,当您修改它时,这不会影响您传递给它的变量。为了获得修改后的item
指针,你需要传递一个指针(指向指针的指针):
void add(part **item, int *part_count)
然后在*item
(*item)
(或item
)当前使用add
的任何地方
答案 1 :(得分:1)
void add(part **item, int *part_count)
{
char temp[100];
if (!(*item)){
//printf("first alloc\n");
*item = malloc(sizeof(part)*3);
}
else if (*part_count>= 3){
//printf("realloc\n");
*item = realloc(*item, sizeof(part) * (*part_count + 1));
}
item[0][*part_count].name = malloc(sizeof(char)*100); // max of 100 characters
printf("Please enter item name: \n");
fgets(temp, 100, stdin);
strcpy(item[0][*part_count].name, temp);
printf("Please enter item price: \n");
fgets(temp, 100, stdin);
sscanf(temp, "%f", &item[0][*part_count].price);
printf("Please enter item quantity: \n");
fgets(temp, 100, stdin);
sscanf(temp, "%d", &item[0][*part_count].quantity);
*part_count = *part_count+ 1;
}
最终这样做了。不确定是否需要使用**struct
,但这是我可以使用的唯一方法。
答案 2 :(得分:0)
如果没有看到你的其他程序,就不可能有效地回答这个问题。但是,你提到“崩溃运行”,这通常意味着:
之一我强烈建议您尝试以下方法:
答案 3 :(得分:0)
循环显示正确构造。这表明问题在于如何构造数据,或者发送到此函数的参数存在问题。
答案 4 :(得分:0)
你应该把你的功能写成
void print(part item [],int item_count){ ... ... }
在你的函数调用中:print(item,f)