[C] Odwracanie kolejnosci linii w pliku

Napisać program odwracający plik tekstowy plik.txt. Pierwszym wierszem wyjściowym ma być ostatni wiersz pliku wejściowego, drugim – przedostatni itd.  Założyć,  że wiersze nie przekraczają 255 znaków.

Wykorzystane – listy dwukierunkowe.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <stdio.h>
#include <stdlib.h>

typedef struct a{

    char a[255];
    struct a *next;
    struct a *prev;

} strk;

void wstaw(strk *, char[255]); // wstawienie na koniec
int main()
{
    strk a;
    strk* wsk=&a;
    strk* head=&a;
    wsk->next=NULL;
    wsk->prev=NULL;
    strcpy(wsk->a, "");
    int i=0;
    char f[255]; //zmienan pomocnicza
    FILE* plik = fopen("c://plik.txt", "r");//otwirramy plik

    while(!feof(plik))
    {
        fscanf(plik, "%s\n", f);// wczytujemy kazda linie
        i++;
        wstaw(wsk, f);// i wrzucamy ja do listy na koniec
    }

    while(wsk->next!=NULL)//przesuwamy liste na koniec
    {

        wsk=wsk->next;

    }

    while(i>0)//wyswietlamy tyle elementow ile ma linii plik ze wzgledu na 1 element listy ktory stworzylem statycznie
    {
        printf("%s\n", wsk->a);
        wsk=wsk->prev;
        i--;
    }
    return 0;
}

void wstaw(strk *a, char co[255]){

    while(a->next != NULL)
    {
   
        a=a->next;

    }

    strk *nowy = (strk*) malloc(sizeof(strk));//nowy element w pamiec

    strcpy(nowy->a,co);// wartosc przpisana
    nowy->next=NULL;// wskaznik przypisany do NULL
    nowy->prev=a;
    a->next=nowy; // podlaczamy nowa do starej
}
Dzięki za wizytę,
Mateusz Mazurek
Podziel się na:
    Facebook email PDF Wykop Twitter

Dodaj komentarz

avatar

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subskrybuj  
Powiadom o