Реализовать выводы структуры в функции - C (СИ)
Формулировка задачи:
Всем привет! Помогите, пожалуйста, запихнуть выводы моей структуры в функцию, типо:
Вот код:
Спасибо!
void PrintPriceList(int j, int p, char goods[j].item, char goods[j].shop, char goods[j].price)
{
for(j = 0; j < p; j++)
{
printf("%d.", j + 1);
printf(" %s",goods[j].item);
printf(" %s",goods[j].shop);
printf(" %s",goods[j].price);
printf("\n");
}
}int main()
{
int i, j, k, p, choose, F, NewN, m;
bool f;
setlocale(LC_ALL, "Russian");
struct Price
{
char item[20];
char shop[20];
char price[20];
} goods[n], tmp;
i = 0;
FILE *file;
file = fopen("c:\\1text.txt","r");
printf("Меню:\n");
printf("\t1.Дополнить прайс-лист (Файл) и отсортировать\n\t2.Отсортировать исходный прайс-лист (Файл)\n");
printf("\nВведите пункт меню: ");
scanf("%d", &choose);
system("cls");
switch(choose)
{
case 1:
printf("Введите количество добавляемых позиций: ");
scanf("%d", &F);
while(!(feof(file)))
{
fscanf(file, "%s %s %s", goods[i].item, goods[i].shop, goods[i].price);
i++;
}
i--;
p = i;
printf("\nВ файле имеется %d позиции(ий)", p + 1);
printf("\n\nВведите:");
for(k = p + 1; k < F + p + 1; k++)
{
printf("\nНазвание товара № %d: ", k + 1);
scanf("%s", &goods[k].item);
printf("\nМагазин № %d: ", k + 1);
scanf("%s", &goods[k].shop);
printf("\nСтоимость № %d: ", k + 1);
scanf("%s", &goods[k].price);
}
system("cls");
printf("Новый прайс-лист:\n");
printf("\n");
printf(" Товар Магазин Цена\n");
printf("\n");
for(j = 0; j < F + p + 1; j++)
{
printf("%d.", j + 1);
printf(" %s",goods[j].item);
printf(" %s",goods[j].shop);
printf(" %s",goods[j].price);
printf("\n");
}
m = F + p + 1;
printf("\n");
printf("Данные с клавиатуры введены для следующих товаров:\n");
printf("\n");
printf(" Товар Магазин Цена\n");
printf("\n");
for(j = p + 1; j < F + p + 1; j++)
{
printf("%d.", j - p);
printf(" %s",goods[j].item);
printf(" %s",goods[j].shop);
printf(" %s",goods[j].price);
printf("\n");
}
do
{
f = false;
for (int j = 0; j < m - 1; j++)
{
if(goods[j].item[0] > goods[j+1].item[0])
{
f = true;
tmp = goods[j];
goods[j]= goods[j+1];
goods[j+1] = tmp;
}
}
} while(f==true);
printf("\n");
printf("Прайс-лист после сортировки:\n");
printf("\n");
printf(" Товар Магазин Цена\n");
printf("\n");
for(j = 0; j < F + p + 1; j++)
{
printf("%d.", j + 1);
printf(" %s",goods[j].item);
printf(" %s",goods[j].shop);
printf(" %s",goods[j].price);
printf("\n");
}
fclose(file);
file = fopen("c:\\1text.txt","w");
for(i = 0; i < F + p + 1; i++)//Запись в файл
{
fprintf(file, "%s %s %s\n", goods[i].item, goods[i].shop, goods[i].price);
}
break;
case 2:
while(!(feof(file)))
{
fscanf(file, "%s %s %s", goods[i].item, goods[i].shop, goods[i].price);
i++;
}
i--;
p = i;
printf("\nВ файле имеется %d позиции(ий)", p + 1);
printf("Исходный прайс-лист:\n");
printf("\n");
printf(" Товар Магазин Цена\n");
printf("\n");
for(j = 0; j < p; j++)
{
printf("%d.", j + 1);
printf(" %s",goods[j].item);
printf(" %s",goods[j].shop);
printf(" %s",goods[j].price);
printf("\n");
}
do
{
f = false;
for (int j = 0; j < p - 1; j++)
{
if(goods[j].item[0] > goods[j+1].item[0])
{
f = true;
tmp = goods[j];
goods[j]= goods[j+1];
goods[j+1] = tmp;
}
}
} while(f==true);
printf("\n");
printf("Прайс-лист после сортировки:\n");
printf("\n");
printf(" Товар Магазин Цена\n");
printf("\n");
for(j = 0; j < p; j++)
{
printf("%d.", j + 1);
printf(" %s",goods[j].item);
printf(" %s",goods[j].shop);
printf(" %s",goods[j].price);
printf("\n");
}
fclose(file);
file = fopen("c:\\1text.txt","w");
for(j = 0; j < p; j++)
{
fprintf(file, "%s %s %s\n", goods[j].item, goods[j].shop, goods[j].price);
}
break;
}
getch();
return 0;
}Решение задачи: «Реализовать выводы структуры в функции»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#define ITEM_SIZE 20
#define SHOP_SIZE 20
#define PRICE_SIZE 20
typedef struct Good Good;
struct Good
{
char item[ITEM_SIZE];
char shop[SHOP_SIZE];
char price[PRICE_SIZE];
};
void
Gprint(Good *g)
{
printf("\t%s", g->item);
printf("\t%s", g->shop);
printf("\t%s", g->price);
}
void
Gset(Good *g, char *item, char *shop, char *price)
{
strncpy(g->item, item, ITEM_SIZE - 1);
strncpy(g->shop, shop, SHOP_SIZE - 1);
strncpy(g->price, price, PRICE_SIZE - 1);
}
void
printgoods(Good *g, int n)
{
int i;
for (i = 0; i < n; i++, g++) {
printf("%d.", i);
Gprint(g);
printf("\n");
}
}
int
main(void)
{
Good goods[2];
Gset(goods, "Item 0", "Shop 0", "$0.99");
Gset(goods+1, "Item 1", "Shop 1", "$1.99");
printgoods(goods, 2);
return 0;
}
Объяснение кода листинга программы
- Подключаются необходимые заголовочные файлы: stdio.h и string.h
- Определяются константы: ITEM_SIZE, SHOP_SIZE, PRICE_SIZE. Они представляют собой размеры массивов в структуре Good.
- Объявляется структура Good.
- Реализуется функция Gprint, которая выводит значения полей структуры Good.
- Реализуется функция Gset, которая устанавливает значения полей структуры Good.
- Реализуется функция printgoods, которая выводит список товаров, используя функцию Gprint.
- В функции main создается массив структур Good, инициализируются две структуры с помощью функции Gset.
- Вызывается функция printgoods для вывода списка товаров.
- Программа возвращает 0, заканчивая свою работу.