Проблемы в структуре и логике c в функции в c - PullRequest
1 голос
/ 02 апреля 2020

Итак, моя проблема в том, что у меня есть 2 структуры (продукты и заказы), и у меня есть 2 массива продуктов, называемых sistem, и другой, называемый sistem_orders.

Итак, моя проблема в том, что я хочу добавить определенное количество продукт в системе на заказ.

Переменные и структуры:

int i = 0; /* counts the number of products */
int y = 0; /* counts the number of orders */

/* Structures */
typedef struct product 
{
   int ident;
   char desc[64]; /* string that describes a product eg. "bread" */
   int price;  /* price of the product*/
   int weight; /* weight of the product eg. 2kg */
   int quant; /* quantity of the product in stock */
   int state_prod;
}product;

typedef struct order 
{
   int ident_o;
   product set_prod[200]; /* Set of products */
   int state;
}order;

product sistem[10000]; /* array of products */
order sistem_orders[500]; /* array of orders */

Функция:

void A(int ide, int idp,int quant)
{
   int peso = 0;
   int peso_do_prod = sistem[idp].weight * quant;
   if (order_in_system(ide) == 0)
   {
     printf("Impossible to add product %d to order %d. Order inexistent.\n",idp,ide);
   }
   else if ((product_in_system(idp) == 0))
   {
     printf("Impossible to add product %d to order %d. Product inexistent.\n",idp,ide);
   }
   else
   {
      if (product_in_order(ide,sistem_orders,idp) == 0)
      {
         sistem_orders[ide].set_prod[idp] = sistem[idp];
         sistem_orders[ide].set_prod[idp].quant = quant;
         sistem[idp].quant -= quant;
         peso += peso_do_prod;
      }
      else if (product_in_order(ide,sistem_orders,idp) == 1)
      {
       if (quant > sistem[idp].quant)
       {
          printf("Impossible to add product %d to order %d. Insufficient quantity in stock\n",idp,ide);
       }
       else
       {
         peso += peso_do_prod;
          if (peso < 200)
         {
          sistem_orders[ide].set_prod[idp].quant += quant;
         }
       else if (peso > 200)
         {
            printf("Impossible to add product %d to order %d. Order's weight is over 200\n",idp,ide);
         }
      }
   }
   }
}

Дополнительные функции:

int product_in_order(int ide,order s[],int idp)
{
   if (s[ide].set_prod[idp].state_prod == 1)
   {
      return 1;
   }
   else
   {
      return 0;
   }
}

int product_in_system(int idp)
{
   if (sistem[idp].state_prod == 1)
   {
      return 1;
   }
   else
   {
      return 0;
   }
}

int order_in_system(int ide)
{
   if (sistem_orders[ide].state == 1)
   {
      return 1;
   }
   else
   {
      return 0;
   }
}

Мой ввод:


Adds a product into to the system with description: bread, price: 73, weight: 6, quantity: 75 //creates a product, it creates a product and adds it into the sistem with ID: i (in this case 0)
Adds a product into to the system with description: eggs, price: 85, weight: 9, quantity: 21
Adds a product into to the system with description: bacon, price: 46, weight: 1, quantity: 9
Adds a product into to the system with description: bacon, price: 45, weight: 4, quantity: 80
N //creates an order, it creates an order and adds it into the sistem_orders with ID: y (in this case 0)
N //New order 1
N //New order 2
N //New order 3
Adds quantity of 81 of the 3rd product into the 3rd order
x //an exit command

Мой вывод:

New product 0.
New product 1.
New product 2.
New product 3.                        
New order 0.                      
New order 1.
New order 2.
New order 3.

Правильный вывод:

New product 0.
New product 1.
New product 2.
New product 3.                        
New order 0.                      
New order 1.
New order 2.
New order 3.
Impossible to add product 3 to order 3. Insufficient quantity in stock.

Так что в принципе это означает, что я не могу добавить третий продукт в порядок, потому что его количество равно 81, что больше, чем у меня в системе.

Но почему-то он даже не go в этом цикле, и я не могу понять, что не так в этом функция.

Так что, если кто-нибудь может мне помочь, я был бы очень признателен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...