witam, mam taki maly problem. Zaczalem robic baze danych w c++ i dosc szybko sie nacialem. Oczywiscie wkleilem tylko to co jest wazne do rozwiazania mojego problemu.
struct laptop
{
string marka;
string model;
double cena;
int ilosc;
};
void dodaj_do_bazy(laptop *lap,int n)
{
cout<<"Ile chcesz wczytac??\n"; /nie wiem jak powiazac to n z n przy wywolaniu
cin>>n;
for(int i=0;i<n;++i)
{
cout<<"Podaj marke :\n";
cin>>lap[i].marka;
cout<<"Podaj model :\n";
cin>>lap[i].model;
cout<<"Podaj rok produkcji :\n";
cin>>lap[i].cena;
cout<<"Podaj cene samochodu :\n";
cin>>lap[i].ilosc;
}
}
int main()
{
char wybor;
do
{
wybor=getch();
switch (wybor)
{
case '4': { //n powinno byc licznikiem ile ma byc
n= ??; //wczytanych nowych elementow
laptop *lap = new laptop [n]; //zrobilem cos takiego
dodaj_do_bazy(lap,n); //ale na 100% jest to zle
break;
}
}
}
while (wybor!='7');
return 0;
}
poki co chce zrobic wczytywanie jeszcze bez zapisywania do pliku, tylko "zgubilem sie" na wywolaniu tej funkcji, poprostu nie wiem jak to zrobic zeby dobrze powiazac zmienne w funkcji i przy wywolaniu. Nie lubie c++ ale coz zrobic.
Mam nadzieje ze ktos naprowadzi mnie na dobre rozwiazanie.
[quote="skotik87"]laptop *lap = new laptop [n]] Najpierw poczytaj o zakresach danych(czy jak to się tam nazywa), lap po wyjściu programu ze switcha jest niewidoczny, czyli masz wyciek pamięci. [quote="skotik87"]cout<<"Ile chcesz wczytac??\n"]Tego co chcesz zrobić z parametrem n nie za bardzo rozumiem to nie mogę pomóc. Napisz jak do czego Ci ta zmienna jest potrzebna
struct laptop
{
string marka;
string model;
double cena;
int ilosc;
};
void dodaj_do_bazy(laptop *lap,int n)
{
for(int i=0;i<n;++i)
{
cout<<"Podaj marke :\n";
cin>>lap[i].marka;
cout<<"Podaj model :\n";
cin>>lap[i].model;
cout<<"Podaj rok produkcji :\n";
cin>>lap[i].cena;
cout<<"Podaj cene samochodu :\n";
cin>>lap[i].ilosc;
}
}
int main()
{
char wybor;
do
{
wybor=getch();
switch (wybor)
{
case '4': {
cout<<"Ile chcesz wczytac??\n";
cin>>n;
laptop *lap = new laptop [n];
dodaj_do_bazy(lap,n);
break;
}
}
}
while (wybor!='7');
return 0;
}
mozesz takze tworzyc tablice w funkci dodaj_do_bazy i zwracac referencje. przy okzji lepiej wykorzystaj malloc do tworzenia tablicy bo przy duzym rozmiarze mozesz przepelnic stos.
0dd pisze:mozesz takze tworzyc tablice w funkci dodaj_do_bazy i zwracac referencje. przy okzji lepiej wykorzystaj malloc do tworzenia tablicy bo przy duzym rozmiarze mozesz przepelnic stos.
To jest C++, tu się używa STL-a, w tym przypadku szablonu vector. ¯adnych malloców :P
Wlasnie jest taki problem ze z gory mam powiedziane co mam uzyc do robienia tej bazy i jak to ma mniej wiecej wygladac. Projekt na uczelnie :/ ja to inaczej bym zrobil, ale wole nie ryzykowac z tym prof, wystarcza mi kolosy z c++ na kartkach :shock:
chodzi mi o to co dopisal Odd. Tylko czy to jest dobry sposob na wywolanie tej funkcji??
mozesz takze tworzyc tablice w funkci dodaj_do_bazy i zwracac referencje
czy moglbys mi napisac jakis malutki przyklad jakby to wygladalo. z ledwoscia zalapalem wskazniki, a referencji juz nie dalem rady :/
0dd pisze:jak ktos uzywa struct w c++ to moze i uzyc malloc (:
Tak sie sklada, ze w C++ struct sie praktycznie niczym nie rozni od class (rozni sie tylko domyslnym ustawieniem sekcji dostepu), wiec porownanie nietrafione. Po drugie, new w c++ to takie nowe malloc, wiec zamiana tego na malloc praktycznie nic nie zmieni. Po trzecie jak alokujesz pamiec do jakis celow, nie wazne czy przez new czy malloc to potem przydaloby sie ja zwolnic, w tym przypadku tak: