https://pastein.ru/t/PD

  скопируйте уникальную ссылку для отправки


#include<stdio.h>
#include<conio.h>
#include<iostream>
#include<windows.h>
#include <crtdbg.h>
//#include <malloc.h>
struct  food{
	
	int calories;
	int weight; 
	char name[20];
	void begin();
	int energy(){ return calories*weight/100;}
	//int(food::*pfunc)() = &energy;
};

char begin(int num);

void food::begin(){
system("cls");
setlocale(0,"");
printf("введите название еды: ");
scanf("%s",name);
printf("\n какова его калорийность (на 100 грамм): ");
scanf("%d",&calories);

printf("\n вес ингредиента (в грамма):");
scanf("%d",&weight);
printf("\n ингредиент добавлен");
Sleep(900);
system("cls");
return;
}


int main(){
	setlocale(0,"");
	int n_food=0;
	food *eat;// = (food*)malloc(20 * sizeof(food));
	while (1) {
		char c = begin(n_food);
		switch (c) {
		case 'a' :
		{
			
			
			food* temp = new food[n_food + 1];

			for (int i = 0; i < n_food; i++)
			{
				temp[i] = eat[i]; // копируем во временный объект
			}
			if(n_food)delete[] eat;
			eat = temp;

			eat[n_food].begin();
			n_food++;
		}
			break;

		case 'p':
		{
				system("cls");
				printf("выберите продукт и нажмите Enter:\n");
				for (int i = 0; i < n_food; i++) {
					printf("%d -- %s \n", i + 1, eat[i].name);
				}
				int n;
				scanf("%d", &n);
				printf("\n %d калорий в %s", eat[n - 1].energy(), eat[n - 1].name);
				_getch();
				system("cls");
			}
		break;
		case 's': {
				system("cls");
			beg:
				printf("калорийность какого количества продуктов вы хотите просуммировать(max %d):\n", n_food);
				int n;
				scanf("%d", &n);
				if (n <= n_food && n > 0) {
					for (int i = 0; i < n_food; i++) {
						printf("%d -- %s \n", i + 1, eat[i].name);
					}
					printf("выберите продукты:\n");
					int prod[20];
					for (int i = 0; i < n; i++) {
						scanf("%d", &prod[i]);
					}
					int sum = 0;
					for (int j = 0; j < n; j++) {
						sum += eat[prod[j] - 1].energy();
					}
					printf("\n %d калорий ", sum);
					_getch();
					system("cls");
				}
				else {
					printf("введите корректные данные!");
					goto beg;
				}
			}
		break;
		case 'q': {
			if(n_food)delete[] eat;
			_CrtDumpMemoryLeaks();
				return 0;
			}
		
		}
	}
}

char begin(int num){
	char  c;
	startB:
	if(num == 0){
		printf(" a -- добавить новый продукт \n q -- выход\n");
		c=_getch();

		if((c!='a')&&(c!='q')){
			system("cls");
			printf("\n введите корректные данные \n");
			_getch();
			system("cls");
			goto startB;
			}
		}
	else if(num==1){
		printf(" a -- добавить новый продукт \n");
		printf(" p -- расчитать калории продукта\n");
		printf(" q -- выход \n");
		c=_getch();
		if((c!='a')&&(c!='q')&&(c!='p')){
			system("cls");
			printf("\n введите корректные данные \n");
			_getch();
			system("cls");
			goto startB;
			}
		}
	else if(num>1){
		printf(" a -- добавить новый продукт \n");
		printf(" p -- расчитать калории продукта\n");
		printf(" s -- расчитать калории нескольких продуктов\n");
		printf(" q -- выход \n");
		c=_getch();
		if((c!='a')&&(c!='q')&&(c!='p')&&(c!='s')){
			system("cls");
			printf("\n введите корректные данные \n");
			_getch();
			system("cls");
			goto startB;
			}
		}

return c;
}