» »

[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:

#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;
    }

tadej123321 ::

Sm že popravu:D

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…

failcoder ::

napako maš v 88 vrstici, funkcija natakar

prvi je null in ti potem while zanka krešne.


Vredno ogleda ...

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

C programiranje (strani: 1 2 3 )

Oddelek: Programiranje
14126727 (17023) amacar
»

[C] Seznam s poljem

Oddelek: Programiranje
232269 (1749) aceton
»

[c++]Urejanjepolja

Oddelek: Programiranje
91286 (1107) purki
»

[C] Narascajoce sortiranje linearnega seznama

Oddelek: Programiranje
71766 (1655) Jebiveter
»

[c] char zadeva

Oddelek: Programiranje
222109 (1907) TheCyborg

Več podobnih tem