Advertisement
alch1337

pn_stack_2.0

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