Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

tworzenie kolejnych struktur

Ostatnio zmodyfikowano 2017-01-07 00:02
Autor Wiadomość
mikewazowski
Temat założony przez niniejszego użytkownika
tworzenie kolejnych struktur
» 2017-01-06 22:14:53
mam program w którym struktury są zapisywane na liście, chciałabym żeby z każdym kolejnym dodaniem osoby wartość id wzrastała o 1 zaczynając od id=1 dla pierwszej struktury i w tym momencie kod przestaje działać (tzn dodają się osoby na liste, dane są zapisywane ale id nie wynosi 1, ani nie wzrasta)
C/C++
struct Dane
{
    string imie;
    string nazwisko;
    int id;
};
struct Student
{
    Dane dane;
    Student * next;
    Student * prev;
};

Student * stworzelement()
{
    Student * element;
    string imie;
    string nazwisko;
    int id;
   
    cout << "podaj ID: " << id << endl;
    cout << "podaj imie: ";
    cin >> imie;
    cout << "podaj nazwisko: ";
    cin >> nazwisko;
   
    element = new Student();
    element->next = NULL;
    element->prev = NULL;
    element->dane.id = id;
    element->dane.imie = imie;
    element->dane.nazwisko = nazwisko;
   
   
    return element;
}
int dodajkoniec( Student ** head )
{
    Student * pom;
    int id;
   
    if( * head == NULL )
    {
        id = 1;
        Student * tmp = stworzelement();
        * head = tmp;
        cout << "***dodano do bazy***" << endl;
    }
   
    else
    { id++;
        Student * tmp = stworzelement();
        pom = * head;
       
        while( pom->next != NULL )
        {
            pom = pom->next;
            id++;
        }
        tmp->prev = pom;
        pom->next = tmp;
        cout << "***dodano do bazy***" << endl;
    }
   
}
P-156134
karambaHZP
» 2017-01-06 22:54:17
Deklarujesz lokalnie w funkcjach zmienną
id
 zakrywając pole o nazwie
id
.
Robisz na tej lokalnej operacje, a po opuszczeniu funkcji po prostu jest niszczona i pozostaje
tylko nietknięta wartość pola.
C/C++
#include <iostream>

int main()
{
    int a { 1 };
    { // blok ze zmienna lokalną a
        int a { 3 };
        ++a;
        std::cout << "lokalnie a = " << a << '\n';
    }
    std::cout << "w main() a = " << a << '\n';
}
P-156140
mikewazowski
Temat założony przez niniejszego użytkownika
» 2017-01-06 23:12:53
tylko że zależy mi by id było przypisane do konkretnej struktury tak by można wyszukać daną strukturę po numerze id więc twoja propozycja odpada, chyba że źle zrozumiałam jak działa kod który napisałeś
P-156141
karambaHZP
» 2017-01-06 23:42:11
C/C++
#include <iostream>
#include <string>
using namespace std;

struct Dane
{
    string imie;
    string nazwisko;
    int id;
};
struct Student
{
    Dane dane;
    Student * next;
    Student * prev;
    static int num_of_students; // dodana zmienna statyczna przechowująca liczbę strudentów
};

int Student::num_of_students = 0;

Student * stworzelement()
{
    Student * element;
    string imie;
    string nazwisko;
    int id = ++Student::num_of_students; // użycie liczby studentów do nadania nowego nr id
   
    cout << "podaj ID: " << id << endl;
    cout << "podaj imie: ";
    cin >> imie;
    cout << "podaj nazwisko: ";
    cin >> nazwisko;
   
    element = new Student();
    element->next = NULL;
    element->prev = NULL;
    element->dane.id = id;
    element->dane.imie = imie;
    element->dane.nazwisko = nazwisko;
   
   
    return element;
}

void dodajkoniec( Student * head ) // trochę za dużo było tych gwiazdek
{
    Student * pom;
    // tutaj nie ma potrzeby używać id, wszystko dzieje się przy tworzeniu studenta
    if( head == NULL )
    {
        Student * tmp = stworzelement();
        head = tmp;
        cout << "***dodano do bazy***" << endl;
    }
   
    else
    {
        Student * tmp = stworzelement();
        pom = head;
       
        while( pom->next != NULL )
        {
            pom = pom->next;
        }
        tmp->prev = pom;
        pom->next = tmp;
        cout << "***dodano do bazy***" << endl;
    }
}

int main()
{
    Student * list = nullptr;
    dodajkoniec( list );
    dodajkoniec( list );
}
P-156142
mikewazowski
Temat założony przez niniejszego użytkownika
» 2017-01-07 00:02:32
działa jak trzeba, dziękuje bardzo, zamykam
P-156147
« 1 »
  Strona 1 z 1