Jak przekazać tablice struktur zagnieżdżonych do funkcji, aby je modyfikować?

0

Spotykam się dziś z następującym problemem: napisałem program który wykorzystuje zagnieżdżone struktury, oraz tworzy tablicę takich struktur tworząc prostą bazę danych z możliwością edytowania jej przez użytkownika oraz wypisywania jej aktualnego stanu (jest interaktywne menu). Wszystko działa tak jak chciałem. Chciałbym jednak aby czynności w case1 i case 2 (wpisywanie i wypisywanie) odbywały się w osobnych funkcjach, a casy jedynie wywoływały te funkcje. Chciałbym uzyskać pomoc jak powinny wyglądać te funkcje, ich argumenty oraz wywołania.

#include <stdio.h>
#include <stdlib.h>

#define dl 50

const char * teksty[4]=
{
	"Model: ",
	"Procesor: ",
	"Grafika: ",
	"Cena: "
};

struct specyfikacja
{
	char procesor[dl];
	char grafika[dl];
};

struct komputer
{
	char model[dl];;
	struct specyfikacja SPC;
	float cena;
};

int main()
{	
	int i=0;
	int spr;
	struct komputer PC[dl];
	int licznik=0;
	int menu;
	int koniec=0;
	
	while(1)
	{
		printf("MENU:\n");
		printf("Dopisanie nowych komputerow do listy.[1]\n");
		printf("Wypisanie aktualnego stanu bazy danych.[2]\n");
		printf("Zakonczenie dzialania programu.[3]\n");
		scanf("%d", &menu);
		
		switch(menu)
		{
			case 1:
				while(1)
				{
					fflush(stdin);
					printf("Podaj model komputera.\n");
					gets(PC[i].model);
					printf("Podaj typ procesora.\n");
					gets(PC[i].SPC.procesor);
					printf("Podaj typ grafiki.\n");
					gets(PC[i].SPC.grafika);
					printf("Podaj cene.\n");
					scanf("%f", &PC[i].cena);
					fflush(stdin);
					licznik++;
					i++;
					printf("Czy chcesz wprowadzic nastepny komputer?\n TAK-1, NIE-0\n");
					scanf("%d", &spr);
					fflush(stdin);
					if (spr==0)
						break;
					else 
						continue;
				}  
				break;
			
			case 2:
				fflush(stdin);
				for(i=0 ; i<licznik ; i++)
				{
					printf("PC%d: \n", i+1);
					printf("%s%s\n", teksty[0], PC[i].model);
					printf("%s%s\n", teksty[1], PC[i].SPC.procesor);
					printf("%s%s\n", teksty[2], PC[i].SPC.grafika);
					printf("%s%.2f\n", teksty[3], PC[i].cena);
				}
				break;
			
			case 3:
				koniec=1;
				break;
			
			default:
				koniec=1;
				break;	
		}
		if(koniec==1)
			break;
		else
			continue;
	}

    system("pause");
    return 0;
} 
0

w case 2 musisz zrobic funkcje z parametrami

licznik, PC

zwraca void
w case 1 potrzebujesz przekazac

*PC

a zwrocic licznik

0
 #include <stdio.h>
#include <stdlib.h>

#define dl 50

int dopisanie(struct komputer* PC); 

void wypisanie(int licznik, struct komputer PC[]); 

const char * teksty[4]=
{
	"Model: ",
	"Procesor: ",
	"Grafika: ",
	"Cena: "
};

struct specyfikacja
{
	char procesor[dl];
	char grafika[dl];
};

struct komputer
{
	char model[dl];;
	struct specyfikacja SPC;
	float cena;
};

int main()
{	
	int i=0;
	int spr;
	struct komputer PC[dl];
	int licznik=0;
	int menu;
	int koniec=0;
	
	while(1)
	{
		printf("MENU:\n");
		printf("Dopisanie nowych komputerow do listy.[1]\n");
		printf("Wypisanie aktualnego stanu bazy danych.[2]\n");
		printf("Zakonczenie dzialania programu.[3]\n");
		scanf("%d", &menu);
		
		switch(menu)
		{
			case 1:
				fflush(stdin);
				dopisanie(PC);
				break;
			
			case 2:
				fflush(stdin);
				wypisanie(licznik, PC);
				break;
			
			case 3:
				koniec=1;
				break;
			
			default:
				koniec=1;
				break;	
		}
		if(koniec==1)
			break;
		else
			continue;
	}

    system("pause");
    return 0;
}

int dopisanie(struct komputer* PC)
{
	int i=0;
	int licznik=0;
	
	while(1)
				{
					fflush(stdin);
					printf("Podaj model komputera.\n");
					gets(PC[i].model);
					printf("Podaj typ procesora.\n");
					gets(PC[i].SPC.procesor);
					printf("Podaj typ grafiki.\n");
					gets(PC[i].SPC.grafika);
					printf("Podaj cene.\n");
					scanf("%f", &PC[i].cena);
					fflush(stdin);
					licznik++;
					i++;
					printf("Czy chcesz wprowadzic nastepny komputer?\n TAK-1, NIE-0\n");
					scanf("%d", &spr);
					fflush(stdin);
					if (spr==0)
						break;
					else 
						continue;
				}
	return licznik;
}

void wypisanie(int licznik, struct komputer PC[])
{
	fflush(stdin);
	int i;
	for(i=0 ; i<licznik ; i++)
	{
		printf("PC%d: \n", i+1);
		printf("%s%s\n", teksty[0], PC[i].model);
		printf("%s%s\n", teksty[1], PC[i].SPC.procesor);
		printf("%s%s\n", teksty[2], PC[i].SPC.grafika);
		printf("%s%.2f\n", teksty[3], PC[i].cena);
	}
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1