Przekazywanie struktur miedzy funkcjami

Odpowiedz Nowy wątek
2018-12-26 16:55
0

Witam, mam napisać program który składa się z funkcji operujących na danych strukturach. Dodawanie, usuwanie, sortowanie ale mam problem ze zrozumieniem jak mogę przekazać juz uzupełnioną strukturę z funkcji do funkcji. Ktoś pomoże ?

#include <stdio.h>

typedef struct { char imie[30];
char nazwisko[50];
short wiek;
char PESEL[11];
char email[50];
} tperson;

int main()
{

system("cls");
int chose_menu=0;
int count=0;
int tab[100];
tperson data_person[100];

    printf("Menu\n\n");
    printf("Liczba elementow w tablicy: %i \n\n",count);
    printf("1.Dodaj.\n");
    printf("2.Usun dany element.\n");
    printf("0.Zakoncz program.\n");
    printf("Wybierz:\n");
    scanf("%i",&chose_menu);

    switch(chose_menu)
    {
    case 1:
    {
        add_person();
        break;
    }
case 2:
    {
        delete_person();
        break;
    }

    case 0:
    {
        system("cls");
        printf("Koniec :)");
        return 0;
        break;
    }
    }

    return 0;
}

void delete_person()
{
    int del;
    printf("Ktory element chcesz usunac ?\n");
    scanf("%i",&del);

}

void add_person (tperson data_person[100]){
int tab_size=0;

do{

    printf("Ile elementow chcesz dodac(max 100) ?\n");
    scanf("%i",&tab_size);
    if(tab_size>100)
    {
    system("cls");
    printf("Podaj liczbe z zakresu!!!\n");
    system("PAUSE");
    system("cls");

    }
}while(tab_size>100);

    for (int i=0;i<tab_size;i++)
    {
        printf("Nr.%i\nPodaj imie:\n",i+1);
        scanf("%s",&data_person[i].imie);
        printf("Nr.%i\nPodaj nazwisko:\n",i+1);
        scanf("%s",&data_person[i].nazwisko);
        printf("Nr.%i\nPodaj wiek:\n",i+1);
        scanf("%i",&data_person[i].wiek);
        printf("Nr.%i\nPodaj pesel:\n",i+1);
        scanf("%s",&data_person[i].PESEL);
        printf("Nr.%i\nPodaj email:\n",i+1);
        scanf("%s",&data_person[i].email);
    }

    /*
    for (int i=0;i<tab_size;i++)
    {
        printf("%s\n",data_person[i].imie);
        printf("%s\n",data_person[i].nazwisko);
        printf("%i\n",data_person[i].wiek);
        printf("%s\n",data_person[i].PESEL);
        printf("%s\n",data_person[i].email);
        printf("\n");
    }
      */

 main();
}

Napisałem też drugi program z mniejsza ilością elementów ale także mi nie wychodzi... Pomocy.

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

typedef struct{
int wiek;
} osoba;

int main()

{
    int chose;
    printf("1.Dodaj wiek dla 3 osoob.\n");
    scanf("%i\n",&chose);

    switch(chose)
        {
            case 1:
            {
            void dodaj_wiek(osoba);
            break;
            }
        }

    return 0;
}

void dodaj_wiek(osoba& ja)
{

    for (int i=0;i<3;i++)
        {
        printf("%i.Wiek:\n",i);
        scanf("%i",&ja.wiek);
        }

        system("PAUSE");

}
edytowany 1x, ostatnio: kq, 2018-12-26 16:56

Pozostało 580 znaków

2018-12-26 16:57
kq
2

Tagujesz C, a piszesz w C++. Zdecyduj się.

Przekazywanie parametru przez wartość i referencję

Wywoływanie funkcji main() jest nielegalne w C++, i jest co najmniej bardzo dziwną praktyką w C.


Pozostało 580 znaków

2018-12-26 17:25
0
kq napisał(a):

Tagujesz C, a piszesz w C++. Zdecyduj się.

Przekazywanie parametru przez wartość i referencję

Wywoływanie funkcji main() jest nielegalne w C++, i jest co najmniej bardzo dziwną praktyką w C.

Ok, to już widziałem tylko tutaj nic nie pisze jak by tą strukturę przekazać.

Napisałem coś takiego tylko co jest teraz źle ?

#include <stdio.h>

typedef struct { char imie[30];
char nazwisko[50];
short wiek;
char PESEL[11];
char email[50];
} tperson;

int main()
{

system("cls");
int chose_menu=0;
int count=0;
int tab[100];
tperson data_person[100];

    printf("Menu\n\n");
    printf("Liczba elementow w tablicy: %i \n\n",count);
    printf("1.Dodaj.\n");
    printf("2.Test.\n");
    printf("0.Zakoncz program.\n");
    printf("Wybierz:\n");
    scanf("%i",&chose_menu);

    switch(chose_menu)
    {
    case 1:
    {
        add_person();
        break;
    }
case 2:
    {
        test();
        break;
    }

    case 0:
    {
        system("cls");
        printf("Koniec :)");
        return 0;
        break;
    }
    }

    return 0;
}

void test ()
{

    add_person (&tperson data_person[100]);                                             //odbiór zmiennej ?
    printf("%s",add_person (data_person[0].imie));

}

void add_person (*tperson data_person[100]){
int tab_size=0;

do{

    printf("Ile elementow chcesz dodac(max 100) ?\n");
    scanf("%i",&tab_size);
    if(tab_size>100)
    {
    system("cls");
    printf("Podaj liczbe z zakresu!!!\n");
    system("PAUSE");
    system("cls");

    }
}while(tab_size>100);

    for (int i=0;i<tab_size;i++)
    {
        printf("Nr.%i\nPodaj imie:\n",i+1);
        scanf("%s",&data_person[i].imie);
        printf("Nr.%i\nPodaj nazwisko:\n",i+1);
        scanf("%s",&data_person[i].nazwisko);
        printf("Nr.%i\nPodaj wiek:\n",i+1);
        scanf("%i",&data_person[i].wiek);
        printf("Nr.%i\nPodaj pesel:\n",i+1);
        scanf("%s",&data_person[i].PESEL);
        printf("Nr.%i\nPodaj email:\n",i+1);
        scanf("%s",&data_person[i].email);
    }

    /*
    for (int i=0;i<tab_size;i++)
    {
        printf("%s\n",data_person[i].imie);
        printf("%s\n",data_person[i].nazwisko);
        printf("%i\n",data_person[i].wiek);
        printf("%s\n",data_person[i].PESEL);
        printf("%s\n",data_person[i].email);
        printf("\n");
    }
      */

 main();
}

to jak najlepiej wrócić do funkcji main ?

edytowany 1x, ostatnio: Pabloo111, 2018-12-26 17:26

Pozostało 580 znaków

2018-12-26 21:39
0

Nie potrafię przekazać tablicy do funkcji. Czytam jak to zrobić cały dzień i nie wychodzi....

Pozostało 580 znaków

2018-12-26 23:49

Możesz to zrobić na różne sposoby, generalnie logika będzie podobna, zrobiłem z dużym uproszczeniem. Musisz mieć funkcję, która tworzy nową strukturę, tutaj tperson_init, a potem Budujesz metodę wypełniająca tablecę obiektów. Przesyłasz argument, zawsze tak samo, przez wskaźnik (dokładnie, jak Pisze @twonek, wskażnik przez wartość, a jego wartość to adres).:

#include <stdio.h>

typedef struct { 
    char imie[30];
    char nazwisko[50];
    short wiek;
    char PESEL[11];
    char email[50];
} tperson;

void add_persons (tperson * tab);

tperson * tperson_init(char gname [], char name [], short age, char pesel [], char email []);

int main(int argc, char **argv) {
    tperson * p = tperson_init("Albert", "Einstein", 22, "00", "[email protected]");
    printf("%s\n", p->imie);

    tperson tab [100];
    add_persons(tab);
    tperson p1 = tab[1];
    printf("%s\n", p1.imie);
    return 0;
}

tperson * tperson_init(char gname [], char name [], short age, char pesel [], char email []) {
  tperson * p =  {gname, name, age, pesel, email};
  return p;
}

void add_persons(tperson * tab) {
    tperson * p  = tperson_init("Albert", "Einstein", 22, "00", "[email protected]");
    tperson * p1 = tperson_init("Alan", "Turing", 22, "00", "[email protected]");
    tab[0] = *p;
    tab[1] = *p1;
}

edytowany 2x, ostatnio: lion137, 2018-12-27 02:24

Pozostało 580 znaków

2018-12-27 02:21
0
lion137 napisał(a):

Możesz to zrobić na różne sposoby, generalnie logika będzie podobna, zrobiłem z dużym uproszczeniem. Musisz mieć funkcję, która tworzy nową strukturę, tutaj add_person, a potem Budujesz metodę wypełniająca tablecę obiektów. Przesyłasz argument, zawsze tak samo, przez wskaźnik (dokładnie, jak Pisze @twonek, wskażnik przez wartość, a jego wartość to adres).:

#include <stdio.h>

typedef struct { 
  char imie[30];
  char nazwisko[50];
  short wiek;
  char PESEL[11];
  char email[50];
} tperson;

void add_persons (tperson * tab);

tperson * tperson_init(char gname [], char name [], short age, char pesel [], char email []);

int main(int argc, char **argv) {
  tperson * p = tperson_init("Albert", "Einstein", 22, "00", "[email protected]");
  printf("%s\n", p->imie);

  tperson tab [100];
  add_persons(tab);
  tperson p1 = tab[1];
  printf("%s\n", p1.imie);
  return 0;
}

tperson * tperson_init(char gname [], char name [], short age, char pesel [], char email []) {
  tperson * p =  {gname, name, age, pesel, email};
  return p;
}

void add_persons(tperson * tab) {
  tperson * p  = tperson_init("Albert", "Einstein", 22, "00", "[email protected]");
  tperson * p1 = tperson_init("Alan", "Turing", 22, "00", "[email protected]");
  tab[0] = *p;
  tab[1] = *p1;
}

Dziękuję za pomoc, na taką odpowiedź liczyłem. Teraz juz wiem mniej więcej jak to zrobić. Pozdrawiam.

Proszę Bardzo. Również pozdrawiam i Życzę udanych dereferencji:) w Nowym Roku:) - lion137 2018-12-27 02:25

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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