Объясните ошибки и что я не так сделал по поводу кода. Работа со структурами
Товар на складе Поля: Вид товара, Количество на складе Цена за единицу Дата поступления
- определить общую стоимость товара указанного вида на складе;
- вывести информацию о товарах, поступивших в указанный день, в порядке возрастания количества
В ходе выполнения у меня вылезли три проблемы:
- Неккоректный ввод и вывод(При вводе все сместилось вверх, при выводе русского языка выводит символы)
- Вывод единицы при попытке умножения элементов массива структуры.
- Не выводит информацию, после того как была введена переменная типа char
Вот код:
#define _CRT_SECURE_NO_WARNINGS
#include <locale.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
struct Products
{
char product_type[20];
int quantity;
int price;
char date[20];
};
int func_scan(char query[40])
{
int number;
int flag = 1;
while (flag)
{
printf("%s ", query);
if (scanf("%d ", &number) == 0 || number < 0)
{
while (getchar() != '\n');
puts("Ошибка — повторите ввод");
}
else
flag = 0;
}
return number;
}
void showinformaboutproducts(struct Products prod[50], int max_place)
{
for (int i = 0; i < max_place; i++)
{
printf("Вид товара %10s | Количество: %4d | Цена за единицу: %4d | Дата: %10s \n",
prod[i].product_type, prod[i].quantity, prod[i].price, prod[i].date);
}
}
int main()
{
setlocale(LC_ALL, "rus");
int max_place;
struct Products information[50];
struct Products swap;
max_place = func_scan("Сколько помещений вы хотите зарегистрировать для товара");
char date_register[20];
for (int i = 0; i < max_place; i++)
{
printf("\nВведите вид товара(название:(Английский или Транслит):");
scanf("%s", &information[i].product_type);
information[i].quantity = func_scan("Введите количество товара: ");
information[i].price = func_scan("Введите цену за единицу товара: ");
printf("\nВведите дату регистрации товара(Английский или Транслит: ");
scanf("%s", &information[i].date);
}
printf("Вы зарегистрировали товары на складе в следующем виде: \n ");
showinformaboutproducts(information, max_place);
char nameproduct[20];
printf("Введите вид товара, чью стоимость хотите подсчитать(Английский или Транслит): ");
scanf("%s ", &nameproduct);
int all_price = 1;
for (int i = 0; i < max_place; i++)
{
if (information[i].product_type == nameproduct)
{
all_price = information[i].quantity * information[i].price;
}
}
printf("Общая сумма указанного товара равна %d \n", all_price);
//Вывести информацию о товарах, которые поступили в указанный день
int flag = 1;
while (flag)
{
flag = 0;
for (int i = 0; i < max_place - 1; i++)
{
if (information[i].quantity > information[i + 1].quantity)
{
swap = information[i];
information[i] = information[i + 1];
information[i + 1] = swap;
flag = 1;
}
}
}
printf("Укажите день, в который поступили товары, чтобы получить информацию");
scanf("%s ", &date_register);
for (int i = 0; i < max_place; i++)
{
if (information[i].date == date_register)
{
printf("Название: %10s | Количество: %4d | Цена за единицу: %4d | Дата поступления: %10s ", information[i].product_type, information[i].quantity, information[i].price, information[i].date);
}
}
system("pause");
}
Хотелось бы узнать где именно допущены ошибки и как можно их исправить.
if (information[i].product_type == nameproduct)вы сравниваете указатели а не содержимое строк. Используйтеstrcmp()– avp Feb 13 '21 at 11:41