Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define MAX_SIZE (20 + 1)
- typedef struct kafa_st{
- char kafic[MAX_SIZE];
- char kafa[MAX_SIZE];
- float cena;
- struct kafa_st *sl;
- }KAFA;
- void list_init(KAFA**);
- void delete_list(KAFA**);
- KAFA* make_kafa(char*,char*,float);
- void add_to_list(KAFA**,KAFA*);
- FILE* safe_open(char*,char*);
- void load(FILE*,KAFA**);
- void save(KAFA*,char*);
- int main(int argc,char** argv){
- if(argc != 3){
- printf("Nepravilan poziv programa.");
- return EXIT_FAILURE;
- }else{
- KAFA* glava;
- FILE* file = safe_open(argv[2],"r");
- list_init(&glava);
- load(file,&glava);
- fclose(file);
- save(glava,argv[1]);
- delete_list(&glava);
- return EXIT_SUCCESS;
- }
- }
- void list_init(KAFA** glava){
- *glava = NULL;
- return;
- }
- void delete_list(KAFA** glava){
- KAFA* t;
- while(*glava != NULL){
- t = *glava;
- *glava = (*glava)->sl;
- free(t);
- }
- return;
- }
- KAFA* make_kafa(char* kafic,char* kafa,float cena){
- KAFA* new = (KAFA*)malloc(sizeof(KAFA));
- if(new == NULL){
- printf("Nije moguce zauzeti memoriju.");
- exit(EXIT_FAILURE);
- }
- strcpy(new->kafic,kafic);
- strcpy(new->kafa,kafa);
- new->cena = cena;
- new->sl = NULL;
- return new;
- }
- void add_to_list(KAFA** glava,KAFA* new){
- KAFA* t = *glava;
- if(*glava == NULL){
- *glava = new;
- }else{
- while(t->sl != NULL){
- t = t->sl;
- }
- t->sl = new;
- }
- return;
- }
- FILE* safe_open(char* name,char* mode){
- FILE* f = fopen(name,mode);
- if(f == NULL){
- printf("NIje moguce otvoriti datoteku %s.\n",name);
- exit(EXIT_FAILURE);
- }
- return f;
- }
- void load(FILE* f,KAFA** glava){
- char kafic[MAX_SIZE];
- char kafa[MAX_SIZE];
- float cena;
- while(fscanf(f,"%s %s %f",
- kafic,
- kafa,
- &cena) != EOF){
- add_to_list(glava,make_kafa(kafic,kafa,cena));
- }
- return;
- }
- void save(KAFA* glava,char* param){
- KAFA *t = glava;
- float sum = 0;
- int count = 0;
- while(t != NULL){
- printf("%6.2f %s %s\n",t->cena,t->kafa,t->kafic);
- if(strcmp(t->kafa,param) == 0){
- sum += (*t).cena;
- count++;
- }
- t = t->sl;
- }
- if(count != 0){
- printf("\nProsecna cena %s kafe je = %.2f",param,sum/(float)count);
- }else{
- printf("\n%s kafa nije u ponudi!",param);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment