problems with linked list

i have some problem and really don't know what to do, i will appreciate any help. I need to make program for adding new animals to linked list, but not adding and printing works the way it should.

here's my code:

list_pointer.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <iostream>

using namespace std;

bool allocated=false;

struct pets{
	int code, cost, delivery_date;
	char name, type;

	pets *next;
};

int register_new(pets *head,     //potrebna glava liste
	int code, int cost, 
	int delivery_date, 
	char* naziv, //passing chars to function has give me some troubles too so i'll ignore that 'till i make other things work
	char* vrsta)
{
	if (allocated==false) {
		head->next=NULL;
		allocated=true;
	}

	pets *current=head;         //prvi element 

	while (current->next)				//traženje elementa
		current=current->next;	   //koji je zadnji u listi

	pets *new_el=new pets;   //incijaliziramo novi element u listi
	current->next=new_el;	  //pokazivac *slijedeci (sada) predzadnjeg elementa pokazuje na novokreirani (koji je sada zadnji)
	new_el->next=NULL;		 //a pokazivac novog elementa = NULL
	new->code = code;
//	strcpy((char*)novi->vrsta, vrsta); //type of pet
//	strcpy((char*)novi->naziv, naziv); //name of pet
	new_el->cost=cost;
	new_el->delivery_date=delivery_date;

	new_el->next=current->next;   
	current->next=new_el; 

	current=head->next;
	while(current!=NULL && current->code!=code)
		current=current->next;

	if (current==NULL)		//ako ova funkcija ne može naći zapis onda stvarno ne znam tko može
	{
		return 0;
	}//check if adding new pet is succesfull

	else
	{
		return 1;
	}
}

void print(pets *head)   
{
	pets *current=head->next;

	while(current){
		cout << "\nSifra: " << current->code;
		//cout << "\nVrsta: " << trenutni->vrsta;
		//cout << "\nNaziv: " << trenutni->naziv;
		cout << "\nCijena: " << current->name;
		cout << "\nDatum dostave: " << current->delivery_date << "\n------------------------\n\n";
		current=current->next; //pomicanje kroz listu
	}
}


main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include "list_pointer.h"

using namespace std;

int code=1;
int check=0;

void register_new (pets *new_el)
{
	int cost, delivery_date;
	char name[30], type[30];
	cout << "\nWhat is type of pet\n>>";
	cin >> type;
	cout << "\nWhat is name of pet\n>>";
	cin >> name;
	cout << "\nHow much cost\n>>";
	cin >> cost;
	cout << "\nDate of delivery\n>>";
	cin >> delivery_date;
	check=register_new(new_el, code, cost, delivery_date, name, type);
}

int main()
{
	pets *new_el=new pets;
	int choice;
	do{
		cout << "\n\n\t\Menu\n\n1) Add new record\n2) Print all records\n3) Exit\n\nYour choice?\n>>";
		cin >> choice;
		switch (choice){
		case 1: 
			{
				register_new(lj);
				if (check==1) {
				cout << "Pet is succesfully added.\n";
				code++;
			}
			else
				cout << "Registering new pet is unsuccesfully.\n"; break;}

		case 2:
			{cout << "\nThis pets has been added:\n\n";
			print(new_el);
			break;}

		default:
			cout << "\nNonexistent choice.\n";
		} 
	}while (choice!=3);
}


again, thanks for any help
i finally found solution, so i'm gonna paste code there if someone else will have similar problem (names of variables and commentars are in croatian):

lista_pokazivac.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66

#include <iostream>

using namespace std;

struct ljubimci{
	int sifra, cijena;
	string naziv, vrsta, datum_dostave;

	ljubimci *slijedeci, *prethodni;
};

int unos(ljubimci *glv,     //potrebna glava liste
	int zifra, int cijena, 
	string datum_dostave, 
	string naziv, 
	string vrsta)
{
	ljubimci *novi, *zadnji;         
	zadnji=glv;

	while (zadnji->slijedeci)				//traženje elementa
		zadnji=zadnji->slijedeci;	   //koji je zadnji u listi

	novi=new ljubimci;   //incijaliziramo novi element u listi
	zadnji->slijedeci=novi;	  //pokazivac *slijedeci (sada) predzadnjeg elementa pokazuje na novokreirani (koji je sada zadnji)
	novi->slijedeci=NULL;		 //a pokazivac novog elementa = NULL
	novi->prethodni=zadnji;		//pokazivac na prethodni element
	novi->cijena=cijena;		//pridružujemo unesene podatke podatkovnom dijlu čvora
	novi->sifra = zifra;
	novi->vrsta=vrsta;
	novi->naziv=naziv;
	novi->datum_dostave=datum_dostave;

	ljubimci *trenutni=glv->slijedeci;
	while(trenutni!=NULL && trenutni->sifra!=zifra)
		trenutni=trenutni->slijedeci;

	if (trenutni==NULL)		//ako ova funkcija ne može naći zapis onda stvarno ne znam tko može
	{
		return 0;
	}

	else
	{
		return 1;
	}
}

void ispis(ljubimci *glv)   
{
	ljubimci *trenutni=glv->slijedeci;

	while(trenutni->slijedeci!=NULL)
		trenutni=trenutni->slijedeci;		//dođemo do zadnjeg elementa u listi

	while(trenutni->prethodni!=NULL){		//ispis unazad
		cout << "\nSifra: " << trenutni->sifra;
		cout << "\nVrsta: " << trenutni->vrsta;
		cout << "\nNaziv: " << trenutni->naziv;
		cout << "\nCijena: " << trenutni->cijena;
		cout << "\nDatum dostave: " << trenutni->datum_dostave << "\n------------------------\n\n";
		trenutni=trenutni->prethodni; //pomicanje kroz listu
	}
}


main.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

#include <iostream>
#include <string>
#include "lista_pokazivac.h"

using namespace std;

int sifra=1;
int provjera=0;

void upisi (ljubimci *glv)
{
	int ciena;
	string naziv, vrsta, datum_dostave;
	cout << "\nUpisi vrstu stvorenja\n>>";
	cin >> vrsta;
	cout << "\nUpisi naziv stvorenja\n>>";
	cin >> naziv;
	cout << "\nUpisi koliko je potrebno novaca da bi se imalo to stvorenje\n>>";
	cin >> ciena;
	cout << "\nUpisi koji je datum dostave\n>>";
	cin >> datum_dostave;
	provjera=unos(glv, sifra, ciena, datum_dostave, naziv, vrsta);
}

int main()
{
	ljubimci *lj=new ljubimci;
	lj->slijedeci=NULL;
	lj->prethodni=NULL;
	int izbor;
	do{
		cout << "\n\n\t\tIZBORNIK\n\n1) Dodaj zapis u listu\n2) Ispisi sadrzaj liste\n3) Izlaz iz programa\n\nVas izbor?\n>>";
		cin >> izbor;
		switch (izbor){
		case 1: 
			{
				upisi(lj);
				if (provjera==1) {
				cout << "Ljubimac je uspjesno dodan.\n";
				sifra++;
			}
			else
				cout << "Ljubimac nije uspjesno dodan.\n"; break;}

		case 2:
			{cout << "\nUneseni su sljedeci ljubimci:\n\n";
			ispis(lj);
			break;}

		case 3:
			break;

		default:
			cout << "\nNepostojeci izbor.\n";
		} 
	}while (izbor!=3);
}
Topic archived. No new replies allowed.