[C++] rekordy, jak dodać ich wiele, za pomocą pętli?


(Kornicameister) #1
struct osoba

{

 string imie;

 string nazwisko;

}

no i definiuje sobie nowy rekord osoby, w sposób osoba nowa; i potem odwołuje się nowa.imie itd..

ale jakbym chciał np. sobie zdefiniować sobie 100-takich rekordów... myślę i myślę i wymyślić nie mogę

próbowałem robić coś w deseń

osoba nowa[], czyli definiować do tablicy... ale no nie chodzi i pomysły mi się skończyły ?

jakaś sugestia ?


(matiit) #2
typedef struct osoba Osoba;

Osoba osoby[100];

Chyba tak powinno działać, tworzysz tablicę składającą się ze 100 elementów typu Osoba.


(Kojot) #3

Tak też działa:

osoba nowa[100];

albo tak:

osoba* nowa= new osoba[100];

Postaw jeszcze średnik po deklaracji struktury:

struct osoba

{

string imie;

string nazwisko;

};

([alex]) #4

albo tak:

vector nowa;

Też masz tablicę a na dodatek dynamiczną.


(Kornicameister) #5

wektory są piękne... ale one są już zaimplementowane w STL :slight_smile:

a ja tak trochę z próźności, trochę z konieczności i dlatego, że warto się samemu nauczyć implementacji różnych struktur bawię się w to sam :slight_smile:

ale generalnie @[alex], coś takiego będzie działało jak będę chciał na bieżąco dodawać i odejmować wpisy rekordów, nie ?

czy źle się wyraziłem :slight_smile: ?

-- Dodane Pt sty 08, 2010 8:17 pm --

niezbyt to chodzi :), ale może to wina mojego kompilatora :slight_smile:


([alex]) #6

Trzeba dołączyć:

include

using namspace std;


(Kornicameister) #7

dołączyłem :wink:

nie jest to moje pierwsze spotkanie z wektorami :slight_smile:

#include 

#include 


using namespace std;


int main()

{

    struct student

        {

        string imie;

        string nazwisko;

        short int wiek;

            };


    vector nowy;


    cout <<"Rekord-dynamiczny"<
    char odp;

    cout <<"Dalej T, koniec N"<
    cin >>odp;

    switch (odp)

    {

        case 'T' : goto tak;

        break;

        case 'N' : goto nie;

        break;

    }


tak:

{


    }

nie:

{

    cout<<"KONIEC"<
    return 0;

    }

    }

dalej kodu nie piszę, ale nie będę ruszał dalej, jak mam ten błąd, który wyskakuje na linii

vector nowy;

kod błędu

/rekord_dynamiczny.cpp||In function ‘int main()’:|

/rekord_dynamiczny.cpp|15|error: template argument for ‘template class std::allocator’ uses local type ‘main()::student’|

/rekord_dynamiczny.cpp|15|error: trying to instantiate ‘template class std::allocator’|

/rekord_dynamiczny.cpp|15|error: template argument 2 is invalid|

/rekord_dynamiczny.cpp|15|error: invalid type in declaration before ‘;’ token|

||=== Build finished: 4 errors, 0 warnings ===|

wszystkie błędy dotyczą tej samej linijki :slight_smile:


(Kojot) #8

Strukturę zadeklaruj poza funkcją main(), w ten sposób:

#include 

#include 


using namespace std;

    struct student

    {

        string imie;

        string nazwisko;

        short int wiek;

     };



int main()

{



    vector nowy;


    cout <<"Rekord-dynamiczny"<
    char odp;

    cout <<"Dalej T, koniec N"<
    cin >>odp;

    switch (odp)

    {

        case 'T' : goto tak;

        break;

        case 'N' : goto nie;

        break;

    }


tak:

{


    }

nie:

{

    cout<<"KONIEC"<
    return 0;

    }

    }

([alex]) #9

W życiu nie wiedziałem bardziej bezsensownego kodu!


(Kornicameister) #10

sensowny, nie sensowny... nie zamierzałem pisać nic w tym kodzie co by miało jakiś głębszy sens, a starałem się nauczyć deklarować dynamicznie strukturę. Poza tym, jeśli na moje pytanie o błędzie nie umiesz znaleźć odpowiedzi, a jedynie wyrazić swoje niczym nie uzasadnione "oburzenie" to może najlepiej nic nie pisać, tyle w temacie tego co Ty napisałaś

natomiast @Kojot dziękuje za pomoc, próbę pomocy w temacie, a nie wysuwanie obraźliwych komentarzy

-- Dodane So sty 09, 2010 3:34 pm --

poza tym powyższy kod jest jedynie przykładem, a nie jakimś pełnowartościowym programem