Advertisement
alch1337

pn_stack

Mar 17th, 2015
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.74 KB | None | 0 0
  1. // ---------- main.c ----------
  2. /**
  3.  *  TODO
  4.  *  NAPISAC PROSTY PROGRAM WCZYTUJACY PLIK KONFIGURACYJNY, ODSEPAROWUJACY NAZWE
  5.  *  PARAMETRU OD JEGO WARTOSCI I WYPISAC NA EKRAN W ODWROTNEJ KOLEJNOSCI NIZ
  6.  *  ZOSTALY ZAPISANE W PLIKU.
  7.  *
  8.  *  1. Wyedytowac plik stack.h (sic!), tak by nie byl zwracany blad kompilacji. ok
  9.  *
  10.  *  2. Stworzyc plik src/stack.c i dodac w nim funkcje umieszczajace i
  11.  *  sciagajace ze stosu. Deklaracje funkcji umiescic w pliku stack.h.
  12.  *  
  13.  *  3. Wczytac plik o nazwie podanej przez uzytkownika z linii polecen.
  14.  *  Odseparowac nazwe parametru od jego wartosci (wyszukac znak '='). Wlozyc na
  15.  *  stos;
  16.  *
  17.  *  4. Wypisac blad na stderr jesli wystapil jakis blad podczas
  18.  *  wczytywania/otwierania pliku;
  19.  *
  20.  *  5. Wypisac wszystkie pary w postaci "<nazwa>" = "<parametr>" na ekran;
  21.  *
  22.  *  6. Zwalniac zaalokowane zasoby...
  23.  *  
  24.  *  7. Dokonczyc w domu!
  25.  *  
  26.  *  PRZYDATNE FUNKCJE:
  27.  *  fopen, fclose, malloc, free, strdup, strndup, fgetc
  28.  *  wczytywac z pliku przy pomocy fgetc
  29.  *    
  30.  *  dodatkowe informacje o tym co wykonuje dana funkcja mozna uzyskac wpisujac w kosoli:
  31.  *  man 3 fopen...
  32.  */
  33.  
  34. #include"stack.h"
  35. #include"stack.h"
  36. #include<stdio.h>
  37. #include<string.h>
  38. #include<stdlib.h>
  39.  
  40. #define MAX 255
  41.  
  42. int main(int argc, char **argv)
  43. {
  44.     FILE * fp;
  45.     if (argc > 1)
  46.         fp = fopen(argv[1], "r");
  47.     else
  48.         printf("no input file specified\n");
  49.  
  50.     int strLength = 0, c, flag = 0;
  51.     char str[MAX];
  52.     char *a, *b;
  53.     while ((c = fgetc(fp)) != EOF ) {
  54.         switch (c) {
  55.             case '=':
  56.                 str[strLength++] = '\0';
  57.                 a = strdup(str);
  58.                 strLength = 0;
  59.                 flag = 1;
  60.                 break;
  61.             case '\n':
  62.                 str[strLength++] = '\0';
  63.                 if (!flag) {
  64.                     a = strdup(str);
  65.                     b = strdup("");
  66.                 }
  67.                 else               
  68.                     b = strdup(str);
  69.                 push(a,b);
  70.                 strLength = 0;
  71.                 flag = 0;
  72.                 break;
  73.             default:
  74.                 str[strLength++] = c;
  75.                 break;
  76.         }
  77.     }
  78.  
  79.  
  80.     struct stack * temp = pop();
  81.     while ((temp = pop()))
  82.         printf("%s=%s\n", temp->name, temp->value);
  83.  
  84.     fclose(fp);
  85.  
  86.     return 0;
  87. }
  88. // -----------------------------
  89. // ---------- stack.h ----------
  90. #ifndef STACK
  91. #define STACK
  92. struct stack
  93. {
  94.   struct stack *next;
  95.   char *name;
  96.   char *value;
  97. };
  98.  
  99. //Definicje ponizszych funkcji i zmiennej w pliku stack.c
  100. extern struct stack * root;
  101. void push(char *a, char *b);
  102. struct stack * pop();
  103. #endif
  104. // -----------------------------
  105. // ---------- stack.c ----------
  106. #include <stdlib.h>
  107. #include "stack.h"
  108.  
  109. struct stack *root;
  110.  
  111. void push (char *a, char *b) {
  112.     struct stack *new = malloc(sizeof(struct stack));
  113.     new->name = a;
  114.     new->value = b;
  115.     new->next = root;
  116.     root = new;
  117. }
  118.  
  119. struct stack * pop() {
  120.     struct stack *temp = root;
  121.     root = root->next;
  122.     return temp;
  123. }
  124. // -----------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement