» »

[C++]Brisanje strukture

[C++]Brisanje strukture

jernejf ::

LP!
Prosim za malo pomoč:8)
Imam program, kjer vnašam, spreminjam in brišem strukturo s pomočjo kazalcev.
No vglavnem...nevem kako bi naj izbrisal.

Del programa:
struct vpis
{
	char naslov[10];
	char URL[100];
	char opis[100];
	char datum[11];
	char avtor[20];

	vpis* k_naslednji;
};

int stevec = 1;

void vnos(vpis* k_pod)
{
	cin.ignore();
	cout  "Naslov spletne strani:"  endl;
	cin.getline((*(k_pod+stevec)).naslov,10,'\n');
	cout  "URL spletne strani:"  endl;
	cin.getline((*(k_pod+stevec)).URL,100,'\n');
	cout  "Opis strani:"  endl;
	cin.getline((*(k_pod+stevec)).opis,100,'\n');
	cout  "Datum zadnje spremembe strani"  endl;
	cin.getline((*(k_pod+stevec)).datum,11,'\n');
	cout  "Avtor strani:"  endl;
	cin.getline((*(k_pod+stevec)).avtor,20,'\n');
	cout  endl;

	stevec++;
}

...
...
...

void izbris(vpis* k_pod)
{
	int izbris;
	char izbira;

	cout  "Kateri vnos zelite izbrisati?"  endl;
	cin    izbris;
	cin.ignore();

	cout  "Izbrisati zelite naslednji vnos:"  endl;
	cout  "Naslov spletne strani..............: "   (*(k_pod+izbris)).naslov   endl;
	cout  "URL spletne strani.................: "   (*(k_pod+izbris)).URL   endl;
	cout  "Opis strani........................: "  (*(k_pod+izbris)).opis   endl;
	cout  "Datum zadnje spremembe strani......: "   (*(k_pod+izbris)).datum   endl;
	cout  "Avtor strani.......................: "   (*(k_pod+izbris)).avtor   endl;
	cout  endl;
	cout  " D - zbrisi,  N - ne zbrisi"  endl;
	cin  izbira;
	if(izbira == 68 || izbira == 100)
	{
		??????????????????????????????????????????
		??????????????????????????????????????????
		??????????????????????????????????????????
    }
	else if(izbira == 78 || izbira == 110)
	cout  "Vnos ni bil izbrisan"  endl;
	else
	cout  "Vpisi  D  ali  N !"  endl;

}

void main()
{
	vpis* k_podatki;
	k_podatki =new vpis[1000];
...
...

case '1':
					{
						vnos(k_podatki);
						break;
					}
				case '2':
					{
						sprememba(k_podatki);
						break;
					}
				case '3':
					{
						izbris(k_podatki);
						break;
					}
				case '4':
					{
						izpis(k_podatki);
						break;


Program deluje, vendar kot povedano nevem kako izbrisati. Verjetno je potrebno z seznami, vendar se trudim že 2 dni, tak da res:\
Hvala:8)

Aja. A se da kako naredit da bi vpisaval tiste smerne puščice, cout *** endl;, ker zaj vedno moram brisati?


[edit - ne bos verjel, ampak ja, se da... le PREBERI ME preberes... - vsc]
  • spremenil: Vesoljc ()

jerac ::

Si se mogoče vprašal zakaj imaš v strukturi vpis* k_naslednji; ? :\ Verjetno moraš implementirati dinamični seznam. To kar maš ti pa je dinamično polje.

jernejf ::

Ja nevem če moram...Jaz sem to dodal ko sem sprobaval nekaj. A se da kako drugače?...Ker mislim da ni mišljeno rešit z seznamom.

jernejf ::

Probal sem naslednje pa ni šlo:
Vstavljeno tja kjer so vprašaji.

int i = izbira;
for(i; i (manjse)= stevec; i++)
{
strcpy((*(k_pod+i)).naslov, (*(k_pod+(i+1))).naslov);
strcpy((*(k_pod+i)).URL, (*(k_pod+(i+1))).URL);
strcpy((*(k_pod+i)).opis, (*(k_pod+(i+1))).opis);
strcpy((*(k_pod+i)).datum, (*(k_pod+(i+1))).datum);
strcpy((*(k_pod+i)).avtor, (*(k_pod+(i+1))).avtor);
}
Torej da bi od tistega vnosa katerega iščem pa do konca "premaknil" celo strukturo in tako povozil tisto prejšnjo. Vse ostale bi se premaknile za eno "niže", zadnja bi se pa tako povozila. No samo ideja ki očitno ni dobra.

EDIT: Namesto navadne prireditve sem dal strcmp. No vsaj prevede, dela pa vseeno ne:'( :'(

Zgodovina sprememb…

  • spremenil: jernejf ()

jernejf ::

A noben neve/noče pomagat. Samo če se da to drugače naredit ali gre samo z dinamičnim seznamom. Da potem grem tisto študirat...čeprav nam še o tem nios razlagali:\
Prosim no:8)

Vesoljc ::

ce za polje ni pomembno da je urejeno, potem uporabi svoj stevec, ki ti pove koliko elementov je dejansko v polju (n od 1000 alociranih). ce moras potem enega izbrisati, premaknes zadnjega na njegovo mesto, stevec pa zmanjsas za eno. to pac pomeni kopiranje vsebine in glede na to da uporabljas fiksne strukture (polja vnaprej dolocenih velikosti) lahko naceloma uporabis tudi memcpy funkcijo.
Abnormal behavior of abnormal brain makes me normal...

Zgodovina sprememb…

  • spremenil: Vesoljc ()

Vesoljc ::

za tale strcpy pa res ne vem kaj kompliciras
strcpy c++ reference
Abnormal behavior of abnormal brain makes me normal...

jernejf ::

Zakaj kompliciram? Drug niz kopiram v prvega. Tako sem si mislil:
Če hočem izbrisati npr. 5 vnos in je vseh vnosov 7, potem kopiram 7 vnos v 6 in 6 v 5.
Pozabil sem edino zmanjšati števec po kopiranju. Bom probal zaj. Najlepša hvala

EDIT: Dela tako...prej pa ni ker sem pozabil števec zmanjšati. Najlepša hvala vesoljc:)) Se priporočam:D

Zgodovina sprememb…

  • spremenil: jernejf ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

programiranje krožek(pomoč)

Oddelek: Pomoč in nasveti
442789 (1777) Marat
»

vprasanje c++

Oddelek: Programiranje
422491 (2490) Volk|
»

[C++]Strukture

Oddelek: Programiranje
54053 (3982) jernejf
»

[c++] uporaba char*

Oddelek: Programiranje
111013 (890) zavger
»

c++ datoteke

Oddelek: Programiranje
464067 (3556) Vesoljc

Več podobnih tem