Forum » Programiranje » [C] Kazalci
[C] Kazalci
tadej123321 ::
Pozdravljeni!
Pišem nek program (domača naloga) in prevajalnik ga čist dobro prebavi, problem je pri shranjevanju v spremenljivke. Ko želim izpisati shranjene podatke mi izpiše neke naključne znake. Kje leži problem? Bi mi znali pomagati da bo zadeva delovala? Delam v C-ju.
Koda:
Pišem nek program (domača naloga) in prevajalnik ga čist dobro prebavi, problem je pri shranjevanju v spremenljivke. Ko želim izpisati shranjene podatke mi izpiše neke naključne znake. Kje leži problem? Bi mi znali pomagati da bo zadeva delovala? Delam v C-ju.
Koda:
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <Windows.h> #define MIZ 77 typedef struct{ int miza; char natakar[10]; char kuhar[10]; char jed[10]; SYSTEMTIME str_t; int kolicina; int status; //1...vneseno 2...pripravljeno }narocilo; typedef struct element{ narocilo narocilnica; struct element *naslednji; }elt; void natakar(int *st, elt *prvi){ int i=*st; char ime[10]; char jed1[10]; elt *tmp; elt *pom; system("CLS"); tmp=(elt*)malloc(1*sizeof(elt)); pom=(elt*)malloc(1*sizeof(elt)); int temp=-1; while((temp<1)||(temp>77)){ system("CLS"); printf("\tMeni NATAKAR:\n\n"); printf("Miza: "); scanf("%d",&temp); } tmp -> narocilnica.miza = temp; system("CLS"); printf("\tMeni NATAKAR:\n\n"); printf("Vase ime: "); scanf("%s", ime); strcpy(tmp -> narocilnica.natakar, ime); strcpy(tmp -> narocilnica.kuhar, "?"); system("CLS"); printf("\tMeni NATAKAR:\n\n"); printf("Kaj bodo jedli: "); scanf("%s", jed1); strcpy(tmp -> narocilnica.jed,jed1); temp=-1; while ((temp<1)||(temp>20)){ printf("Koliko jedi: "); scanf("%d",&temp); system("CLS"); } tmp -> narocilnica.kolicina = temp; tmp -> narocilnica.status = 1; tmp -> naslednji = NULL; GetSystemTime(&tmp -> narocilnica.str_t); if(i==0){ prvi=tmp; prvi -> naslednji = NULL; } else{ pom=prvi; while (pom -> naslednji != NULL){ pom = pom -> naslednji; } pom -> naslednji = tmp; } *st=*st+1; system("PAUSE"); } void kuhar(int *st, elt *prvi){ int i=*st; int x=-1; system("CLS"); printf("\tMeni KUHAR:\n\n"); if(i==0){ printf("Trenutno se ni nobenih narocil.\n\n"); } else{ elt *pom; pom = (elt*)malloc(1*sizeof(elt)); pom = prvi; printf("Pripravimo se na kuhanje...\n\n"); printf("NAROCILA: \n\n"); //dejmo izpisat vsa narocila while (pom != NULL){ printf("\nMiza: %d", pom -> narocilnica.miza); printf("\nJed: %s * %d",pom -> narocilnica.jed, pom -> narocilnica.kolicina); if(pom -> narocilnica.status == 1) printf("\nStatus: SE NI SKUHANO"); if(pom -> narocilnica.status == 2) printf("\nStatus: Skuhal %s", pom->narocilnica.kuhar); printf("\nMizo je stregel %s", pom -> narocilnica.natakar); printf("\nDatum: %d.%d.%d ",pom -> narocilnica.str_t.wDay,pom -> narocilnica.str_t.wMonth,pom -> narocilnica.str_t.wYear); pom = pom -> naslednji; } } system("PAUSE"); } void meni(){ int x=-1; elt *prvi; prvi=(elt*)malloc(1*sizeof(elt)); //definiram prvi element int st=0; //premikam se po tabeli while (x!=0){ system("CLS"); printf("\nIzbirajte:\n\t(1) Natakar\n\t(2) Kuhar\n\t(3) EXIT\n"); printf("\n\tIzbira: "); scanf("%d",&x); if(x==1) natakar(&st, prvi); else if(x==2) kuhar(&st, prvi); } free(prvi); } int main(){ meni(); return 0; }
- poskusil klonirati: tadej123321 ()
tadej123321 ::
Sm že popravu:D
popravljena koda:
ŠE VEDNO PA IMAM TEŽAVO: težava nastane, ko želim vnesti naslednje naročilo, program se takrat sesuje... kakšen namig???
Kdorkol...
popravljena koda:
/* Za restavracijo napišite del kode, ki je namenjena interni dvosmerni komunikaciji med natakarji in kuhinjo. Natakarji naročila vpisujejo preko dlančnikov. V kuhinji je osebni računalnik z večjim zaslonom, kjer se izpisujejo vsa naročila v vrstnem redu, v katerem so jih natakarji vnesli. Vsak kuhar ob koncu priprave naročila preko tipkovnice potrdi, da je jed pripravljena in naročilo tako zaključeno. Implementirajte podatovno strukturo vsaNarocila, ki je polje (angl. array) elementov tipa narocilo in hrani podatke o vseh podanih naročilih. Posamezni elementi tega polja so torej tipa narocilo in omogočajo hranjenje podatkov o mizi, natakarju, datumu, jedi, kolicini in statusu jedi. Restavracija ima pri tem 77 miz, več natakarjev in kuharjev. Status jedi ima dve možni vrednosti in je po natakarjevem vnosu enak "vneseno", po kuharjevi končni potrditvi pa "pripravljeno". Vrstni red priprave jedi je odvisen od zasedenosti posameznih kuharjev. (Ker ne gre za strogo zaporedno obdelavo naročil v kuhinji, mora biti omogočen dostop do poljubnega naročila. Zato smo v prvi vrsti tudi izbrali podatkovni tip seznam in ne podatkovnega tipa vrsta.) Poleg samih podatkovnih struktur napišite tudi funkcije, ki omogočajo delo s temi strukturami. Izdelajte torej uporabniški vmesnik za natakarja in kuharja, ki omogoča zgoraj opisano funkcionalnost. */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <Windows.h> #define MIZ 77 typedef struct{ int miza; char natakar[10]; char kuhar[10]; char jed[10]; SYSTEMTIME str_t; int kolicina; int status; //1...vneseno 2...pripravljeno }narocilo; typedef struct element{ narocilo narocilnica; struct element *naslednji; }elt; elt *natakar(int *st){ elt *prvi; elt *tmp; elt *pom; int i=*st; char ime[10]; char jed1[10]; system("CLS"); tmp=(elt*)malloc(1*sizeof(elt)); pom=(elt*)malloc(1*sizeof(elt)); int temp=-1; while((temp<1)||(temp>77)){ system("CLS"); printf("\tMeni NATAKAR:\n\n"); printf("Miza: "); scanf("%d",&temp); } tmp -> narocilnica.miza = temp; system("CLS"); printf("\tMeni NATAKAR:\n\n"); printf("Vase ime: "); scanf("%s", ime); strcpy(tmp -> narocilnica.natakar, ime); strcpy(tmp -> narocilnica.kuhar, "?"); system("CLS"); printf("\tMeni NATAKAR:\n\n"); printf("Kaj bodo jedli: "); scanf("%s", jed1); strcpy(tmp -> narocilnica.jed,jed1); temp=-1; while ((temp<1)||(temp>20)){ printf("Koliko jedi: "); scanf("%d",&temp); system("CLS"); } tmp -> narocilnica.kolicina = temp; tmp -> narocilnica.status = 1; tmp -> naslednji = NULL; GetSystemTime(&tmp -> narocilnica.str_t); if(i==0){ prvi=tmp; prvi -> naslednji = NULL; } else{ pom=prvi; while (pom -> naslednji != NULL){ pom = pom -> naslednji; } pom -> naslednji = tmp; } *st=*st+1; return prvi; system("PAUSE"); } void kuhar(int *st, elt *prvi){ int i=*st; int x=-1; system("CLS"); printf("\tMeni KUHAR:\n\n"); if(i==0){ printf("Trenutno se ni nobenih narocil.\n\n"); } else{ elt *pom; pom = (elt*)malloc(1*sizeof(elt)); pom = prvi; printf("Pripravimo se na kuhanje...\n\n"); printf("NAROCILA: \n\n"); //dejmo izpisat vsa narocila while (pom != NULL){ printf("\nMiza: %d", pom -> narocilnica.miza); printf("\nJed: %s * %d",pom -> narocilnica.jed, pom -> narocilnica.kolicina); if(pom -> narocilnica.status == 1) printf("\nStatus: SE NI SKUHANO"); if(pom -> narocilnica.status == 2) printf("\nStatus: Skuhal %s", pom->narocilnica.kuhar); printf("\nMizo je stregel %s", pom -> narocilnica.natakar); printf("\nDatum: %d.%d.%d ",pom -> narocilnica.str_t.wDay,pom -> narocilnica.str_t.wMonth,pom -> narocilnica.str_t.wYear); pom = pom -> naslednji; } } system("PAUSE"); } void meni(){ int x=-1; elt *prvi; int st=0; //premikam se po tabeli while (x!=0){ system("CLS"); printf("\nIzbirajte:\n\t(1) Natakar\n\t(2) Kuhar\n\t(3) EXIT\n"); printf("\n\tIzbira: "); scanf("%d",&x); if(x==1) prvi=natakar(&st); else if(x==2) kuhar(&st, prvi); } free(prvi); } int main(){ meni(); return 0; }
ŠE VEDNO PA IMAM TEŽAVO: težava nastane, ko želim vnesti naslednje naročilo, program se takrat sesuje... kakšen namig???
Kdorkol...
Zgodovina sprememb…
- spremenil: tadej123321 ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | C programiranje (strani: 1 2 3 )Oddelek: Programiranje | 27875 (18171) | amacar |
» | [C] Seznam s poljemOddelek: Programiranje | 2481 (1961) | aceton |
» | [c++]UrejanjepoljaOddelek: Programiranje | 1367 (1188) | purki |
» | [C] Narascajoce sortiranje linearnega seznamaOddelek: Programiranje | 1872 (1761) | Jebiveter |
» | [c] char zadevaOddelek: Programiranje | 2265 (2063) | TheCyborg |