• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Co zrobić żebym mógł dodawać osoby więcej niż raz

Object Storage Arubacloud
0 głosów
300 wizyt
pytanie zadane 17 listopada 2021 w C i C++ przez Nikon221 Początkujący (340 p.)
edycja 17 listopada 2021 przez Nikon221

Mam taki kod i nie mam pojęcia co zrobić żeby dodawać osoby do struktury więcej niż raz oraz żebym mógł wczytywać wartości z pliku do struktury

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <fstream>
using namespace std;

struct person
{
    int wiek;
    string forename;
    string surname;
};
int z;
person persons[1024];

void menu();
void podajdane();
void wypiszdane();
void sort_fore();
void sort_sur();
void wyszukaj();

int main()
{
    menu();
    return 0;
}

void podajdane()
{
     int i, j;

    cout << "Podaj ile pozycji w bazie" << endl;
    cin>>z;
    for (j=0; j<1024; j++)
    {
        persons[j].wiek = NULL;
    }
    for(i=i;i<z;i++)
    {
    cout << "Podaj wiek: ";
    cin >> persons[i].wiek;
    cout << "podaj nazwisko: ";
    cin >> persons[i].surname;
    cout << "podaj imie: ";
    cin >> persons[i].forename;
    cout << endl;

    }
    menu();
}

void wypiszdane()
{
    int i;
    for (i=0; i<1024; i++)
    {
        if (persons[i].wiek!=NULL)
        {
            cout << "wiek: " << persons[i].wiek << endl;
            cout << "nazwisko: " << persons[i].surname << endl;
            cout << "imie: " << persons[i].forename << endl;
        }

    }
    menu();
}

void sort_sur()
{
    int i, j;
    for( int i = 0; i < 1024; i++ )
    {
        for( int j = 0; j < 1024 - 1; j++ )
        {
            if( persons[ j ].surname > persons[ j + 1 ].surname )
                 swap( persons[ j ], persons[ j + 1 ] );

        }
    }
    menu();
}

void sort_fore()
{
    int i, j;
    for( int i = 0; i < 1024; i++ )
    {
        for( int j = 0; j < 1024 - 1; j++ )
        {
            if( persons[ j ].forename > persons[ j + 1 ].forename )
                 swap( persons[ j ], persons[ j + 1 ] );

        }
    }
    menu();
}

void wyszukaj()
{
    string wysz, wysz_imie, wysz_nazw;
    int i, wysz_wiek;
    cout << "podaj po czym chcesz wyszukac(wiek, imie, nazwisko): ";
    cin >> wysz;
    if (wysz == "wiek")
    {
        cout << "podaj wiek: ";
        cin >> wysz_wiek;
        for (i=0; i<2024; i++)
        {
            if (wysz_wiek == persons[i].wiek)
            {
                cout << "wiek: " << persons[i].wiek << endl;
                cout << "nazwisko: " << persons[i].surname << endl;
                cout << "imie: " << persons[i].forename << endl;
                break;
            }
        }
    }
    if (wysz == "imie")
    {
        cout << "podaj imie: ";
        cin >> wysz_imie;
        for (i=0; i<2024; i++)
        {
            if (wysz_imie == persons[i].forename)
            {
                cout << "wiek: " << persons[i].wiek << endl;
                cout << "nazwisko: " << persons[i].surname << endl;
                cout << "imie: " << persons[i].forename << endl;
                break;
            }
        }
    }
    if (wysz == "nazwisko")
    {
        cout << "podaj nazwisko: ";
        cin >> wysz_nazw;
        for (i=0; i<2024; i++)
        {
            if (wysz_nazw == persons[i].surname)
            {
                cout << "wiek: " << persons[i].wiek << endl;
                cout << "nazwisko: " << persons[i].surname << endl;
                cout << "imie: " << persons[i].forename << endl;
                break;
            }
        }
    }

    menu();
}

void zapisz()
{
    int i;
    string spac = "\n";
    ofstream wiek("wiek.txt", ofstream::trunc);
    ofstream imiona("imiona.txt", ofstream::trunc);
    ofstream nazwiska("nazwiska.txt",  ofstream::trunc);
    for (int i=0; i<1024; i++)
    {
        wiek << persons[i].wiek;
        wiek << spac;
        imiona << persons[i].forename;
        imiona << spac;
        nazwiska << persons[i].surname;
        nazwiska << spac;
    }

}

void menu()
{
    int a, i;
    cout << "MENU" << endl
            << "1. Podaj liczbe osob do wprowadzenia oraz dane tych osob" << endl
            << "2. Koniec" << endl
            << "3. wyswietl" << endl
            << "4. sortuj wedlug nazwiska" << endl
            << "5. sortuj wedlug imienia" << endl
            << "6. wyszukaj osobe" << endl
            << "7. zapisz do pliku" << endl;
            cin >> a;
            switch (a)
            {
            case 1:
                podajdane();
                break;
            case 2:
                break;
                break;
            case 3:
                wypiszdane();
                break;
            case 4:
                sort_sur();
                break;
            case 5:
                sort_fore();
                break;
            case 6:
                wyszukaj();
                break;
            case 7:
                zapisz();
                break;
            default:
                cout << "Podales zla liczbe." << endl;
                menu();
                break;
            }
}

 

komentarz 17 listopada 2021 przez j23 Mędrzec (194,920 p.)

żebym nie musiał wpisuwać do wszystkich wartości wieku - NULL;

Dlaczego NULL, skoro person::wiek to int? Zwykłe zero niedobre?

Zamiast wywoływać menu w każdej funkcji użyj pętli while w funkcji main.

komentarz 17 listopada 2021 przez Nikon221 Początkujący (340 p.)
NULL dlatego że inaczej to wypisuje mi wszystkie 1024 wiersze

EDIT

dobra zapomnij co mówiłem
komentarz 17 listopada 2021 przez j23 Mędrzec (194,920 p.)

Daj po prostu zmienną trzymającą ilość wczytanych/wpisanych rekordów w tablicy persons.

komentarz 17 listopada 2021 przez Oscar Nałogowiec (29,290 p.)

@j23,  Takie wywołanie menu() tworzy chyba rekurencje. Co prawda taktowaną ręcznie, więc szansa na przepełnienie stosu w skończonym czasie jest mała, ale zawsze...

Wręcz sama funkcja menu() jest rekurencyjna w gałęzi default.

komentarz 17 listopada 2021 przez j23 Mędrzec (194,920 p.)
Owszem, ale po co ta rekurencja, jeśli możesz zrobić to samo czytelniej w pętli?

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 174 wizyt
0 głosów
1 odpowiedź 1,312 wizyt
pytanie zadane 16 lipca 2017 w C i C++ przez Krystek102 Bywalec (2,440 p.)
0 głosów
3 odpowiedzi 761 wizyt

92,551 zapytań

141,399 odpowiedzi

319,531 komentarzy

61,937 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...