|
Programiranje Programski jezici, tehnike, alatke... |
|
Alatke vezane za temu | Vrste prikaza |
19.6.2017, 1:37 | #1 |
Član
Član od: 10.1.2014.
Lokacija: Vranje
Poruke: 453
Zahvalnice: 40
Zahvaljeno 41 puta na 35 poruka
|
Pomoc oko zadatka
Pozdrav,
Moram predati zadatak do prekosutra a nikako da popravim gresku.Fora je da se doda novi ucenik upisu se podaci i bira se da li postaviti na pocetak ili kraj.Samo sto se tu zabuni i kod biranja mi ponovo izbaci novi ucenik i ne mogu izabrati da li da se upise na pocetak ili na kraj, bio sam nekako uspeo da to ispravim ali svejedno nije bilo upisalo a ja sam i zaboravio kako sam to uradio. Kod:
#include <stdio.h> #include <stdlib.h> //fflush(stdout); typedef struct ucenik{ int broj; int ocena_vladanje; struct ucenik *sledeci; }Ucenik; void dodaj_na_pocetak(Ucenik *lista,int ocena,int broj){ Ucenik *novi=(Ucenik*)malloc(sizeof(Ucenik)); novi->broj; novi->ocena_vladanje=ocena; novi->sledeci=lista; lista=novi; } void dodaj_na_kraj(Ucenik *lista,int ocena,int broj){ Ucenik *novi=(Ucenik*)malloc(sizeof(Ucenik)); Ucenik *tekuci=NULL; novi->broj=broj; novi->ocena_vladanje=ocena; novi->sledeci=NULL; if(lista==NULL) lista=novi; else{ for(tekuci=lista; tekuci->sledeci != NULL; tekuci=tekuci->sledeci) tekuci->sledeci=novi; } } Ucenik *prvi=NULL; void main(){ int broj_dnevnik; int ocena_vl; char odgovor; Ucenik *tekuci; while(1){ printf("Novi ucenik d/n\n"); scanf("%c",&odgovor); if(odgovor=='n'){ printf("Lista..\n"); printf("Podaci\n"); for(tekuci=prvi; tekuci != NULL; tekuci=tekuci->sledeci) printf("Redni broj: %d Ocena: %d -- adresa tekuceg %d, adresa sledeceg %d\n",tekuci->broj,tekuci->ocena_vladanje,tekuci,tekuci->sledeci); exit(1); } if(odgovor=='d'){ printf("Unesi podatke nove osobe..\n"); printf("Broj ucenika u dnevniku "); scanf("%d",&broj_dnevnik); printf("Ocena iz vladanja "); scanf("%d",&ocena_vl); printf("Dodaj na pocetak ili na kraj? p/k\n"); scanf("%c",&odgovor); if(odgovor=='p') dodaj_na_pocetak(prvi,ocena_vl,broj_dnevnik); else{ if(odgovor=='k') dodaj_na_kraj(prvi, ocena_vl, broj_dnevnik); } } } } |
19.6.2017, 9:49 | #2 |
Deo inventara foruma
|
Re: Pomoc oko zadatka
Odradi fflush(stdin);
posle ove linije Kod:
scanf("%d",&ocena_vl); |
19.6.2017, 11:12 | #3 |
Član
Član od: 10.1.2014.
Lokacija: Vranje
Poruke: 453
Zahvalnice: 40
Zahvaljeno 41 puta na 35 poruka
|
Re: Pomoc oko zadatka
Hvala sada je to dobro, ali kad izaberem 'n' i kad treba da ispise ne ispise nista samo izbaci lista i podaci i prazno
|
19.6.2017, 21:00 | #4 |
Deo inventara foruma
Član od: 14.3.2008.
Lokacija: EHCPCGG
Poruke: 12.111
Zahvalnice: 4.319
Zahvaljeno 3.295 puta na 2.274 poruka
|
Re: Pomoc oko zadatka
Fellow Vranjanac, meni je ovo zapalo za oko kod dodavanja elementa (ako ne grešim, a moguće je dva dana nisam spavao ), ti prolaziš kroz sve elemente ove lančane liste i već kod prve podesiš sledeći na novi pa petlja izabere sledeći koji je sada novi i podesiš mu referencu na samog sebe i tu ti petlja nema kraja. Dodao sam ove vitičaste zagrade tako da petlja ne radi ništa samo ti "dotera" pointer na tekući na poslednji element l. liste i onda njegov sledeći podesi na novi. To što sam dodao vitičaste zagrade znači da će se petlja izvrteti "u prazno" bez izvršenja bilo kakvog koda a onda će se izvršiti tekuci->sledeci=novi;
|
19.6.2017, 23:20 | #5 |
Član
Član od: 10.1.2014.
Lokacija: Vranje
Poruke: 453
Zahvalnice: 40
Zahvaljeno 41 puta na 35 poruka
|
Re: Pomoc oko zadatka
Proklete liste najslabije ih znam.
Probao sam kao sto mi je jos drazi Vranjanac napisao medjutim baca mi gresku da novi nije definisan |
20.6.2017, 2:11 | #6 |
Deo inventara foruma
Član od: 14.3.2008.
Lokacija: EHCPCGG
Poruke: 12.111
Zahvalnice: 4.319
Zahvaljeno 3.295 puta na 2.274 poruka
|
Re: Pomoc oko zadatka
Ovo bi trebalo da radi.
Promenio sam ti sve printf/scanf, funkcije u njihove safe varijante, flushovao sam svuda i stdin i stdout da bi se izbegli potencijalni problemi sa time. Uoči i printf_s(" %c", &odgovor); i blanko znak ispred %c - to je da bi se uklonili potencijalni newline karakteri koje generiše neki od prethodnih printf-ova a što dovodi do "preskakanja" izvršenja scanf funkcije koja traži unos jednog karaktera u delu gde program pita da li želiš da dodaš element na početak ili kraj liste. For petlje su sada while petlje. Takođe, pošto si već deklarisao prvi element kao globalni pomerio sam ga na početak koda ispod strukture i koristio ga u obe pomoćne funkcije umesto prosleđenog parametra "lista". Mrzi me sad da gledam u detalje ali verovatno nisi lepo prosledio referencu na pointer "prvi" inače bi i to trebalo da radi kako treba. Kod:
#include <stdio.h> #include <stdlib.h> //fflush(stdout); typedef struct ucenik { int broj; int ocena_vladanje; struct ucenik *sledeci; }Ucenik; Ucenik *prvi = NULL; void dodaj_na_pocetak(Ucenik *lista, int ocena, int broj) { Ucenik *novi = (Ucenik*)malloc(sizeof(Ucenik)); novi->broj = broj; novi->ocena_vladanje = ocena; novi->sledeci = prvi; printf("Dodajem na pocetak: %d %d \n", novi->broj, novi->ocena_vladanje); fflush(stdout); prvi = novi; } void dodaj_na_kraj(Ucenik *lista, int ocena, int broj) { Ucenik *novi = (Ucenik*)malloc(sizeof(Ucenik)); Ucenik *tekuci = NULL; novi->broj = broj; novi->ocena_vladanje = ocena; novi->sledeci = NULL; printf("Dodajem na kraj: %d %d \n", novi->broj, novi->ocena_vladanje); fflush(stdout); if (prvi == NULL) prvi = novi; else { tekuci = prvi; while (tekuci->sledeci != NULL) tekuci = tekuci->sledeci; tekuci->sledeci = novi; } } int main() { int broj_dnevnik; int ocena_vl; char odgovor, odgovor2; Ucenik *tekuci; while (1) { printf_s("Novi ucenik d/n\n"); fflush(stdout); scanf_s(" %c", &odgovor); fflush(stdin); if (odgovor == 'n') { printf_s("Lista..\n"); printf_s("Podaci\n"); fflush(stdout); tekuci = prvi; printf_s("Adresa prvog %d", tekuci); fflush(stdout); while (tekuci != NULL){ printf_s("Iteracija petlje.."); fflush(stdout); printf_s("Redni broj: %d Ocena: %d -- adresa tekuceg %d, adresa sledeceg %d\n", tekuci->broj, tekuci->ocena_vladanje, tekuci, tekuci->sledeci); fflush(stdout); tekuci = tekuci->sledeci; } system("pause"); exit(1); } if (odgovor == 'd') { printf_s("Unesi podatke nove osobe..\n"); printf_s("Broj ucenika u dnevniku "); fflush(stdout); scanf_s(" %d", &broj_dnevnik); fflush(stdin); printf_s("Ocena iz vladanja "); fflush(stdout); scanf_s(" %d", &ocena_vl); fflush(stdin); printf_s("Dodaj na pocetak ili na kraj? p/k\n"); fflush(stdout); scanf_s(" %c", &odgovor2); fflush(stdin); if (odgovor2 == 'p') dodaj_na_pocetak(prvi, ocena_vl, broj_dnevnik); else { if (odgovor2 == 'k') dodaj_na_kraj(prvi, ocena_vl, broj_dnevnik); } } } return 0; } |
Sledeći korisnik se zahvaljuje korisniku doctor na korisnoj poruci: | ||
DusanN (20.6.2017) |
20.6.2017, 8:56 | #7 |
Član
Član od: 10.1.2014.
Lokacija: Vranje
Poruke: 453
Zahvalnice: 40
Zahvaljeno 41 puta na 35 poruka
|
Re: Pomoc oko zadatka
Not all heroes wear capes
Hvala ti puno |
Bookmarks sajtovi |
Alatke vezane za temu | |
Vrste prikaza | |
|
|
Slične teme | ||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
Procena računara | alien | Šta da kupim? | 6942 | 17.12.2023 10:28 |
Gledanje filmova putem Android telefona? Pomoc hitno | Kobilic | Aparati i oprema | 34 | 13.8.2015 11:24 |
pomoc eksel (rešavanje zadataka) | boza16v | Aplikativni softver | 0 | 1.12.2012 19:12 |
Samsung gt-S5230 Aplikacije??? Pomoc | Kobilic | Aparati i oprema | 26 | 17.9.2012 18:38 |
Pomoc oko pravljenja programa(C) | RUSuper | Programiranje | 14 | 20.4.2012 17:35 |