| | |
| Stránka: 1 z 1
| [ Príspevkov: 4 ] | |
Autor | Správa |
---|
Registrovaný: 19.09.09 Prihlásený: 12.09.13 Príspevky: 359 Témy: 55 Bydlisko: Rohožník | Napísal mack0: 07.03.2011 18:56 | |
|
Zdravím vás!
Mám fakt dost závažný problém. Potrebujem to do školy, pracujem na tom programe už asi 7 hodín, 2 hodiny teraz riešim tento kód:
Kód: data* vymaz(data* prvy) { int vol; int i; data* aktualny = prvy; data* back=NULL; system("CLS"); for(i=0;aktualny!= NULL;i++) { printf("ID: %i \n", aktualny->c); printf("i %i\n",i); printf("1) vymazat tento\n2)skok na dalsi zaznam\n"); scanf("%i",&vol); if (vol==1) { if(i=0) { prvy=aktualny->next; free(aktualny); return prvy; break; } if(i!=0) { back->next=aktualny->next; free(aktualny); return prvy; } } if (vol==2) { back=aktualny; aktualny = aktualny->next; if (aktualny==NULL) { printf("\nSi na konci zoznamu!\n"); return prvy; } } } } Úlohou tento funkcie je, aby vymazala iba jeden prvok zo zreťazeného zoznamu (štruktúra), ktorý mám zadefinovaný takto: Kód: struct data { int c; data* next; };
Samozrejme vytvorím zoznam, vypíšem (cez mnou vytvorenu funkciu print(data* prvy), prvy ukazuje na zaciatok zoznamu), všetko je vporiadku.
Funkcia vymaz má za úlohu, ponúknuť vymazanie aktualne zobrazeneho prvku alebo posun na dalsi (a jeho vymazanie) a ak príjde k vymazaniu, tak funkcia vráti ukazuvatel na zaciatok pola, resp. prvy=vymaz(prvy).
Premenna i slúži ako kontrola (preto ten cyklus ... skúšal som aj iné, no nič nepomáha), či je aktualny prvok prvy, ak je, tak prvy bude ukazovat na nasledovníka a vymazem predchodcu ... pre dalsie prvky zoznamu je pomocny smerník back, ten sa "aktivuje" až keď prejdem 1. prvok.
No a mne to absolutne nechce nic mazat, navyse mi to vypisuje nepochopitelne ine hodnoty i nez by mali byt v tom cykle ....
Prosím vás ... kde je chyba? naozaj ma uz z toho boli hlava ... Ďakujem!
|
|
Registrovaný: 11.01.09 Prihlásený: 28.03.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 07.03.2011 19:53 | |
|
1.) Kód: if(i=0) Opravit na if( i == 0 )2.) Kód: return prvy; break; }
Break je tam zbytocny. Po return sa k nemu nedojde. Nie je to chyba, ale nevyzera to pekne.
Dalej som si nevsimol nic nespravne, ale neskusal som to. ( Funkcia ti stale vrati prvu bunku zoznamu, neviem, ci to tak chces, kedze ho mas aj v parametri funkcie ako pointer ).
|
|
Registrovaný: 19.09.09 Prihlásený: 12.09.13 Príspevky: 359 Témy: 55 Bydlisko: Rohožník | Napísal autor témy mack0: 07.03.2011 20:24 | |
|
No o tom break viem ... ved hovorím, skúšal som všeličo, stále mi to blblo
No aká primitívne hlúpa blbosť ako i=0 mi to kazila ... teraz už všetko ide tak ako má =)
Ďakujem ;-)
|
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14572 Témy: 66 Bydlisko: Žilina |
Citácia: Nie je to chyba, ale nevyzera to pekne.
podľa toho, čo považuješ za "chybu".. ak len to, že ti to neprejde cez kompilátor, tak beriem, v tom prípade by to nebola chyba, ale podľa hocijakých iných ohodnotení správneho kódu to chyba je. Nemá to tam čo robiť a ak je to tam človek schopný napísať, znamená to, že nerozumie danému programovaciemu jazyku.
_________________ C#, PHP, ... |
|
| Stránka: 1 z 1
| [ Príspevkov: 4 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|