我是C的初学者,我遇到了结构问题。 在我向用户询问所有属性之后,id就像打印结构的所有值。问题是,在我输入结构的所有属性并且它再次循环以再次询问属性之后,第一个struct输入被第二个struct输入替换。 我非常确定我会一遍又一遍地分配相同的内存空间,从而导致问题,但我仍然坚持如何修复它。我很欣赏任何关于我能做什么的建议。谢谢!
case 2:
printf ("Please input a SKU number:");
scanf ("%d", &item[MAX_ITEMS].sku_);
printf ("Quantity:");
scanf ("%d", &item[MAX_ITEMS].quantity_);
printf ("Price:");
scanf ("%f", &item[MAX_ITEMS].price_);
printf ("The item is successfully added to the inventory");
break;
打印出sku,数量和价格
switch (menuSelection) {
case 1:
printf ("Inventory\n");
printf ("=========================================\n");
printf ("Sku Price Quantity\n");
for (i =0 ; i<=MAX_ITEMS; i++){
printf ("%d %.2f %d\n", item[i].sku_, item[i].price_, item[i].quantity_);
}
printf ("=========================================\n");
break;
这是我的全部代码:
#include <stdio.h>
#define MAX_ITEMS 10
struct Item{
int sku_;
float price_;
int quantity_;
}item[MAX_ITEMS];
int main (void) {
int size=0;
int menuSelection;
int i=0;
printf ("Welcome to the Shop\n");
printf ("===================");
do {
printf ("\nPlease Select from the following options:\n");
printf ("1) Display the inventory.\n");
printf ("2) Add to shop.\n");
printf ("0) Exit.\n");
printf ("select:");
scanf ("%d", &menuSelection);
if (menuSelection <0 && menuSelection >2){
printf ("Invalid input, try again: Please select from the following options:");
}
else {
switch (menuSelection) {
case 1:
printf ("Inventory\n");
printf ("=========================================\n");
printf ("Sku Price Quantity\n");
for (i =0 ; i<=MAX_ITEMS; i++){
printf ("%d %.2f %d\n", item[i].sku_, item[i].price_, item[i].quantity_);
}
printf ("=========================================\n");
break;
case 2:
printf ("Please input a SKU number:");
scanf ("%d", &item[size].sku_);
printf ("Quantity:");
scanf ("%d", &item[size].quantity_);
printf ("Price:");
scanf ("%f", &item[size].price_);
printf ("The item is successfully added to the inventory");
break;
case 3:
break;
}
}
} while (menuSelection != 0);
return 0;
}
答案 0 :(得分:0)
您创建了一个Item
个对象数组,其长度为MAX_ITEMS
,目前为10
。也就是说,您的对象的索引为0
到9
。然而,当要求用户输入时,您始终将数据存储在item[MAX_ITEMS]
,这超出了数组的范围。
作为旁注,在打印阵列时,您总是将其打印出来,这也意味着未初始化的项目。
您必须存储已经“添加到商店”的项目数量,并使用此数字来确定必须存储用户输入的下一个数组索引。打印时,您只需迭代已存储的项目。不要忘记边界检查,例如当您的商店满员时,不允许新用户输入。
答案 1 :(得分:0)
问题是您始终将新值保存在同一位置:
item[MAX_ITEMS].sku_
相反,您应该有一个计数器,显示存储的项目数量,并将新值保存在与计数器相同的位置:
item[counter].sku_
每次插入后都应增加计数器:
counter++;
因此,您的代码应如下所示:
int counter=0;
...
case 2:
printf ("Please input a SKU number:");
scanf ("%d", &item[counter].sku_);
printf ("Quantity:");
scanf ("%d", &item[counter].quantity_);
printf ("Price:");
scanf ("%f", &item[counter].price_);
printf ("The item is successfully added to the inventory");
counter++;
break;
我希望我有所帮助
答案 2 :(得分:0)
您定义的item
是一个大小为MAX_ITEMS
的数组,因此您的问题不是结构而是数组。
在大多数计算机编程语言中,索引数组应该使用零偏移量。也就是说,MAX_ITEMS
的{{1}}超出了数组的范围,你遇到了一个错误并且找不到它。当您向商店添加商品时,您应该这样编码:
item[MAX_ITEMS]