Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ---------- main.c ----------
- /**
- * TODO
- * NAPISAC PROSTY PROGRAM WCZYTUJACY PLIK KONFIGURACYJNY, ODSEPAROWUJACY NAZWE
- * PARAMETRU OD JEGO WARTOSCI I WYPISAC NA EKRAN W ODWROTNEJ KOLEJNOSCI NIZ
- * ZOSTALY ZAPISANE W PLIKU.
- *
- * 1. Wyedytowac plik stack.h (sic!), tak by nie byl zwracany blad kompilacji. ok
- *
- * 2. Stworzyc plik src/stack.c i dodac w nim funkcje umieszczajace i
- * sciagajace ze stosu. Deklaracje funkcji umiescic w pliku stack.h.
- *
- * 3. Wczytac plik o nazwie podanej przez uzytkownika z linii polecen.
- * Odseparowac nazwe parametru od jego wartosci (wyszukac znak '='). Wlozyc na
- * stos;
- *
- * 4. Wypisac blad na stderr jesli wystapil jakis blad podczas
- * wczytywania/otwierania pliku;
- *
- * 5. Wypisac wszystkie pary w postaci "<nazwa>" = "<parametr>" na ekran;
- *
- * 6. Zwalniac zaalokowane zasoby...
- *
- * 7. Dokonczyc w domu!
- *
- * PRZYDATNE FUNKCJE:
- * fopen, fclose, malloc, free, strdup, strndup, fgetc
- * wczytywac z pliku przy pomocy fgetc
- *
- * dodatkowe informacje o tym co wykonuje dana funkcja mozna uzyskac wpisujac w kosoli:
- * man 3 fopen...
- */
- #include"stack.h"
- #include"stack.h"
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #define MAX 255
- int main(int argc, char **argv)
- {
- FILE * fp;
- if (argc > 1)
- fp = fopen(argv[1], "r");
- else
- printf("no input file specified\n");
- int strLength = 0, c, flag = 0;
- char str[MAX];
- char *a, *b;
- while ((c = fgetc(fp)) != EOF ) {
- switch (c) {
- case '=':
- str[strLength++] = '\0';
- a = strdup(str);
- strLength = 0;
- flag = 1;
- break;
- case '\n':
- str[strLength++] = '\0';
- if (!flag) {
- a = strdup(str);
- b = strdup("");
- }
- else
- b = strdup(str);
- push(a,b);
- strLength = 0;
- flag = 0;
- break;
- default:
- str[strLength++] = c;
- break;
- }
- }
- struct stack * temp = pop();
- while ((temp = pop()))
- printf("%s=%s\n", temp->name, temp->value);
- fclose(fp);
- return 0;
- }
- // -----------------------------
- // ---------- stack.h ----------
- #ifndef STACK
- #define STACK
- struct stack
- {
- struct stack *next;
- char *name;
- char *value;
- };
- //Definicje ponizszych funkcji i zmiennej w pliku stack.c
- extern struct stack * root;
- void push(char *a, char *b);
- struct stack * pop();
- #endif
- // -----------------------------
- // ---------- stack.c ----------
- #include <stdlib.h>
- #include "stack.h"
- struct stack *root;
- void push (char *a, char *b) {
- struct stack *new = malloc(sizeof(struct stack));
- new->name = a;
- new->value = b;
- new->next = root;
- root = new;
- }
- struct stack * pop() {
- struct stack *temp = root;
- root = root->next;
- return temp;
- }
- // -----------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement