-
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
-
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
-
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
-
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
-
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
-
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);
}
-
a dobrze wypisuje ? Jezeli wypisuje dobrze tylko na samym koncu wywala to daj instrukcje funkcji wypisz() :P
-
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
-
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;
}