gpt4 book ai didi

c - 结构输出被最后的用户输入覆盖

转载 作者:行者123 更新时间:2023-11-30 16:55:46 26 4
gpt4 key购买 nike

我是 C 初学者,在结构方面遇到了麻烦。在我向用户询问所有属性后,id 喜欢打印结构的所有值。问题是,在我将所有属性输入到结构中并再次循环返回以第二次请求属性后,第一个结构输入被第二个结构输入替换。我很确定我一遍又一遍地分配相同的内存空间,从而导致了问题,但我一直不知道如何修复它。我很感激任何关于我能做什么的建议。谢谢!

                    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;
}

最佳答案

您创建一个 Item 对象数组,长度为 MAX_ITEMS,当前为 10。也就是说,您的对象的索引为 09。然而,当要求用户输入时,您总是将数据存储在超出数组范围的 item[MAX_ITEMS] 中。

顺便说一句,打印数组时,您总是将其整个打印,这也意味着未初始化的项目。

您必须存储已经“添加到商店”的商品数量,并使用该数字来确定必须存储用户输入的下一个数组索引。打印时,您只需迭代已存储的项目。不要忘记边界检查,例如当您的商店已满时,不允许新用户输入。

关于c - 结构输出被最后的用户输入覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40200918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com