Reklama
Strona 2 z 2 PierwszaPierwsza 12
Pokazuje wyniki od 16 do 24 z 24

Temat: [ C ] Operacje na pliku tekstowym - zadanie

  1. #16
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    Kod:
    void wypisz(struct lista *lista)
    Nie trzeba pisać kolejny raz struct, wiec zamien na
    Kod:
    void wypisz(lista *lista)
    i potem w wywolaniu, zamiast:
    Kod:
    wypisz(lista *pierwszy);
    daj, bo to co wpisales zupelnie bez sensu jest ;p
    Kod:
    wypisz(pierwszy);

  2. #17

    Data rejestracji
    2009
    Posty
    105
    Siła reputacji
    15

    Domyślny

    Teraz wywala cos takiego:

    C:/Program Files (x86)/CodeLite/Michal/tekst/main.c:28:13: error: expected declaration specifiers or '...' before 'lista' - void wypisz(lista *lista)
    C:/Program Files (x86)/CodeLite/Michal/tekst/main.c: In function 'main':
    C:/Program Files (x86)/CodeLite/Michal/tekst/main.c:38:1: warning: implicit declaration of function 'wypisz' [-Wimplicit-function-declaration] - wypisz(pierwszy);
    C:/Program Files (x86)/CodeLite/Michal/tekst/main.c:38:17: error: expected expression before ')' token
    mingw32-make.exe[1]: *** [Debug/main.o] Error 1
    mingw32-make.exe: *** [All] Error 2
    tekst.mk:94: recipe for target `Debug/main.o' failed
    mingw32-make.exe[1]: Leaving directory `C:/Program Files (x86)/CodeLite/Michal/tekst'
    Makefile:4: recipe for target `All' failed
    0 errors, 1 warnings

    Program dalej nic nie wypisuje, ale teraz przynajmniej Windows go juz nie zabija :D po prostu jak kilkam enter to sie zamyka, tak jakby nie miał nic do wypisania.
    Nie wiem ale mam wrazenie ze funkcja wczytaj jest zle napisana, nie wiem czy nie gubia tam wskaźnika na poczatek listy ;o ale nie umiem tego w 100% przeanalizowac
    Ostatnio zmieniony przez misse : 17-01-2014, 17:24

  3. Reklama
  4. #18
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    No bo masz jakis zjebany algorytm na wczytywanie danych ;s wez cos z neta skombinuj, jak widze while(1) to coś mnie trąca ;s

    @down
    Kod:
    nowy=(lista*)malloc(sizeof(lista));
    #EDIT
    no niech sie lista nazywa tylko struktura i nigdzie indziej nie powielaj tej nazwy bo sie kompilator moze jebnac.

    wpisz w google "malloc for struct C" i poczytaj, ja nie pamietam juz tego malloca jebanego, wiem ze zawsze z nim mialem problemy
    Ostatnio zmieniony przez Kusterek : 17-01-2014, 18:40

  5. #19

    Data rejestracji
    2009
    Posty
    105
    Siła reputacji
    15

    Domyślny

    No ale to właśnie jest z neta xD jedyne co znalazłem na wczytywanie z pliku słowo po słowie..

    @up

    Zupełnie nic się nie zmieniło po tym :D te same błędy, tak samo nie działa , tak jakbym nic nie ruszył ; o

    A który to typ a który zmienna? :P I wogole jak nie mam typedef przed strukturą to moge omijać słowo struct w funkcjach? ; d
    Ostatnio zmieniony przez misse : 17-01-2014, 18:03

  6. #20
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    http://stackoverflow.com/questions/5...ithin-a-struct

    tutaj masz kilka wersji, popróbuj

    #EDIT
    z tego co czytałem to widze, ze Twoj malloc dobry jest, wiec wina lezy po stronie wczytawania do listy :P
    Ostatnio zmieniony przez Kusterek : 17-01-2014, 19:45

  7. #21

    Data rejestracji
    2009
    Posty
    105
    Siła reputacji
    15

    Domyślny

    Zmieniłem trochę fukcje wczytywania i teraz przynajmniej cokolwiek się dzieje... program wypisuje losowe znaczki typu '(D albo '{f i jest "program przestał działać" od windowsa xd
    teraz funkcja wyglada tak, zeby nie zgubić wskaźnika na początek to robie start poza pętlą

    Kod:
    void wczytaj(void)
    {
     FILE*f;
     struct lista *nowy;
     f=fopen("plik.txt","a+");
    
    if(pierwszy==NULL){
    			  nowy=(struct lista*)malloc(sizeof(struct lista));
    			  pierwszy=nowy;
    			  
     while (1){
    			  nowy=nowy->next;
    			  nowy=(struct lista*)malloc(sizeof(struct lista));            
                  if(1!=fread(nowy->slowo, sizeof(struct lista), 1, f)) break;
                  nowy->next=NULL;
                  
                                          }
                 }
    fclose(f);
    }

  8. #22
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    a dobrze wypisuje ? Jezeli wypisuje dobrze tylko na samym koncu wywala to daj instrukcje funkcji wypisz() :P
    Ostatnio zmieniony przez Kusterek : 18-01-2014, 14:40

  9. #23

    Data rejestracji
    2009
    Posty
    105
    Siła reputacji
    15

    Domyślny

    Kod:
    void wypisz(struct lista *lista){
        while(lista){
            printf("%s\n",lista->slowo);
            lista=lista->next;
        }
    }
    Wypisuje tylko takie 3 znaczki, nie wypisuje żadnych słów z pliku. ; d

  10. #24
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    masz moja wersje listy jednokierunkowej (z komentarzami)
    Kod:
    #include<stdio.h>
    
    struct lista {
            char slowo[30];
            struct lista *next;
            } lista;
    int main()
    {
    FILE *f = fopen("plik.txt", "a+");
    int i = -1;
    struct lista *list, *wsk, *glowa, *poprz;
    list = (struct lista*) malloc (sizeof(struct lista));
    poprz = list;
    while(!feof(f))
    {
        wsk = (struct lista*) malloc (sizeof(struct lista));
        fscanf(f,"%s\n", &(wsk->slowo));
        list = wsk; //na liscie zapisujemy nowe slowo
        list->next = NULL; //ustawiamy wskaznik na kolejne slowo na null
        poprz->next = list; //wskaznik  poprzedniego elementu ustawia kolejny element na aktualny
        if (i==0){
            glowa = poprz; //w drugim wykonaniu zapisuje wskaznik na pierwszy element do glowy
        }
        poprz = list; //wskaznik bedzie pokazywal poprzedni element
        list = list->next; //lista bedzie teraz pokazywac kolejny element
        i++;
    }
    list = glowa; //powracamy do 1 elementu
    //wypisanie
    while(list!=NULL)
    {
            printf("%s\n",list->slowo);
            list=list->next;
    }
    return 0;
    }

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. C++ Wczytywanie z pliku + tworzenie pliku
    Przez Kokolik w dziale Programowanie
    Odpowiedzi: 1
    Ostatni post: 01-12-2014, 20:13
  2. [java][map] operacje
    Przez Chrill w dziale Programowanie
    Odpowiedzi: 4
    Ostatni post: 06-02-2014, 14:54
  3. [C++] Operacje na plikach
    Przez Jaziq w dziale Programowanie
    Odpowiedzi: 1
    Ostatni post: 10-11-2013, 23:40
  4. [C++] Proste operacje na stringach
    Przez Jaziq w dziale Programowanie
    Odpowiedzi: 4
    Ostatni post: 09-11-2013, 17:12
  5. [JAVA] Tablice - podstawowe operacje
    Przez Chrill w dziale Programowanie
    Odpowiedzi: 6
    Ostatni post: 18-10-2013, 12:58

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •