d3ugi Opublikowano 26 Kwietnia 2005 Zgłoś Opublikowano 26 Kwietnia 2005 Czy ktos moglby mi pomoc znalezc blad w tym kodzie? Mianowicie nie dziala przy probie podania kilku elementow przy podaniu jedno krotnie jeden numer i jeden autor dziala ale przy kilku sie wywala... Nie moge znalezsc bledu wiec jezeli ktos moglbymi pomoc bylbym bardzo wdzieczny... Z gory dziekuje za odpowiedz Pozdrawiam... #include"stdio.h" #include"stdlib.h" #include"math.h" #include"string" struct element { int numer; char *autor; struct element *next; }; void wstaw(struct element **l, int n, char *a); void wypisz(struct element *l); void koniec(); main(){ struct element *lista = NULL; int wart,i, ile; char *a; printf("Podaj liczbe elementow do wstawienia:"); scanf("%i", &ile); for(i = 0; i < ile; i++) { printf("Podaj numer : "); scanf("%i", &wart); printf("\n"); printf("Podaj autora : "); scanf("%s", a); printf("\n"); wstaw(&lista,wart,a); } wypisz(lista); koniec(); } void wstaw(struct element **l, int n, char *a) { struct element * nowy; nowy = (struct element *)malloc(sizeof(struct element)); if(nowy == NULL) { printf("Not enough memory.\n"); exit( -1); } nowy->next = *l; nowy->numer = n; nowy->autor = a; *l = nowy; }; void wypisz(struct element *l) { struct element * wsk; for(wsk = l; wsk; wsk = wsk->next) { printf("\n"); printf("%i ", wsk->numer); printf(".\t"); printf("%s", wsk->autor); printf("\n"); } }; void koniec() { printf("\nKONIEC\n"); fflush(stdin); getchar(); } Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ayem Opublikowano 26 Kwietnia 2005 Zgłoś Opublikowano 26 Kwietnia 2005 poprawilem funkcje main - nie mozesz ot tak sobie wpisywac czegoc pod wskaznik - musisznajpierw zadeklarowac ile tam bedzie znakow. najpierw wiec wczytujesz cos do bufora (temp) ktorego dlugosc ustalasz na tzw 'bezpieczna', po czym za kazzdym razem ustalasz sobie ile to ma byc zarezerwowane dla amiennej a miejsca. main(){struct element *lista = NULL;int wart,i, ile;char *a;char temp[255];printf("Podaj liczbe elementow do wstawienia:");scanf("%i", &ile);for(i = 0; i < ile; i++){printf("Podaj numer : ");scanf("%i", &wart);printf("\n");printf("Podaj autora : ");scanf("%s", temp);a = (char*)malloc((unsigned)strlen(temp)*sizeof(char));strcpy(a,temp);printf("\n");wstaw(&lista,wart,a);}wypisz(lista);koniec();} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
d3ugi Opublikowano 26 Kwietnia 2005 Zgłoś Opublikowano 26 Kwietnia 2005 niestety po wprowadzeniu tych zmian dalej nie dziala do konca jak nalezy :( juz sie nie wywala ale zamiast wpisanego tekstu wyswietla jakies smieci :( moze jakis pomysl jak to naprawic ? z gory big thx Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ygbd Opublikowano 26 Kwietnia 2005 Zgłoś Opublikowano 26 Kwietnia 2005 zrób wykonywanie krokowe z podglądem zmiennych, wtedy będziesz wiedział, czy zapisuje śmieci, czy tylko odczytuje śmieci. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ayem Opublikowano 26 Kwietnia 2005 Zgłoś Opublikowano 26 Kwietnia 2005 coz moge napisac :) "u mnie dziala" :] odpalaj debuger i do dziela Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
d3ugi Opublikowano 10 Maja 2005 Zgłoś Opublikowano 10 Maja 2005 (edytowane) mam kolejny problem mianowicie chodzi o odczytywanie z pliku cos nie dziala i jezeli ktos moglby cos podpowiedziec bylbym bardzo wdzieczny takze z zapisem mam drobny problem ogolnie dziala ale nie wiem jak zrobic zeby mozna bylo cos dopisac do juz istniejacych daneych jezeli ktos moglby co poradzic bylbym bardzo wdzieczny Pozdrawiam #include"stdio.h"#include"stdlib.h"#include"math.h"#include"string"struct element{ int numer; char *autor; char *tytol; char *gatunek; struct element *next;};void wstaw(struct element **l, int n, char *a, char *t, char *g);void wypisz(struct element *l);struct element * dodaj();void odczyt(struct element *l);void zapis(struct element *l);main(){ int odp,koniec; odp=0; int k=0; struct element *lista; while(k==0){ printf("\n********************************************************\n"); printf("MENU \n"); printf("1. Dodaj \n"); printf("2. Wypisz \n"); printf("3. Odczyt \n"); printf("4. Zapis \n"); printf("5. Koniec \n"); printf("\n********************************************************\n"); printf("\n\n\n"); printf("Podaj numer operracji: "); scanf("%d", &odp); switch(odp) { case 1: lista=dodaj(); break; case 2: wypisz(lista); break; case 3: odczyt(lista); break; case 4: zapis(lista); break; case 5: k=1; } }}//******************************************************************************void wstaw(struct element **l, int n, char *a, char *t, char *g){ struct element * nowy; nowy = (struct element *)malloc(sizeof(struct element)); if(nowy == NULL) { printf("Not enough memory.\n"); exit( -1); } nowy->next = *l; nowy->numer = n; nowy->autor = a; nowy->tytol = t; nowy->gatunek = g; *l = nowy;};//******************************************************************************void wypisz(struct element *l){ struct element * wsk; for(wsk = l; wsk; wsk = wsk->next) { printf("\n"); printf("%i ", wsk->numer); printf(".\t"); printf("%s", wsk->autor); printf("\t"); printf("%s", wsk->tytol); printf("\t"); printf("%s", wsk->gatunek); printf("\n"); } };//******************************************************************************struct element * dodaj(){ struct element * wsk=NULL; int wart,i, ile; char *a, *t, *g; char temp[255], temp2[255], temp3[255]; printf("Podaj liczbe elementow do wstawienia:"); scanf("%i", &ile); for(i = 0; i < ile; i++) { printf("Podaj numer : "); scanf("%i", &wart); printf("\n"); printf("Podaj autora : "); gets(temp); gets(temp); printf("Podaj tytol : "); gets(temp2); printf("Podaj gatunek : "); gets(temp3); a = (char*)malloc((unsigned)strlen(temp)*sizeof(char)); t = (char*)malloc((unsigned)strlen(temp2)*sizeof(char)); g = (char*)malloc((unsigned)strlen(temp3)*sizeof(char)); strcpy(a,temp); strcpy(t,temp2); strcpy(g,temp3); printf("\n"); wstaw(&wsk,wart,a,t,g); } return wsk; };//******************************************************************************void zapis(struct element *l){ FILE *in, *out; struct element * wsk; int size; int i; i=0; for(wsk = l; wsk; wsk = wsk->next) { i++; } size=i; if((out = fopen("Biblioteka.TXT", "wt")) == NULL) { printf("Cannot open output file.\n"); exit(-1); } printf("Zapisuje do pliku wielkosc bazy\n"); fprintf(out, "%i ", size); printf("\n"); printf("Zapisuje dane do pliku:\n"); for(wsk = l; wsk; wsk = wsk->next) { fprintf(out, "%i ", wsk->numer); fprintf(out, "%s ", wsk->tytol); fprintf(out, "%s ", wsk->autor); fprintf(out, "%s ", wsk->gatunek); } printf("Dane zapisane\n"); fclose(out);}//******************************************************************************void odczyt(struct element *l){ FILE *in, *out; struct element * wsk; int size; int i; i=0; for(wsk = l; wsk; wsk = wsk->next) { i++; } size=i; if((out = fopen("Biblioteka.TXT", "wt")) == NULL) { printf("Cannot open output file.\n"); exit(-1); } printf("Odczytuje dane z pliku:\n"); for(wsk = l; wsk; wsk = wsk->next) { fscanf(in, "%i", wsk->numer); fscanf(in, "%s", wsk->tytol); fscanf(in, "%s", wsk->autor); fscanf(in, "%s", wsk->gatunek); fgetc(in); }} Edytowane 10 Maja 2005 przez d3ugi Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ayem Opublikowano 10 Maja 2005 Zgłoś Opublikowano 10 Maja 2005 naucz se wreszcie ze kod zrodowy wstawia sie w tagu code Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
d3ugi Opublikowano 10 Maja 2005 Zgłoś Opublikowano 10 Maja 2005 sorry nie wiedzialem ze tak mozna świerzak ze mnie :) juz poprawilem Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
d3ugi Opublikowano 14 Maja 2005 Zgłoś Opublikowano 14 Maja 2005 nikt nie ma pomylu need help :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ayem Opublikowano 15 Maja 2005 Zgłoś Opublikowano 15 Maja 2005 czy dobrze zrozumialem ze ten odczyt ma wczytac cala biblioteke z pliku? jesli o to chodzi, i jesli mnie moje zaspane oczy nie myla to popelniasz ten sam blad co powyzej. Jesli chcesz wczytywac z pliku aktualna pozycje i zapisac ja do jakieos wezla, to musisz najpierw zaallocowac pamiec dla tego elementu listy. czyli mniej wiecej tak: 1. w pliku jako pierwsza linjka znajduje sie ilosc recordow ponizej 2. pred odczytaniem listy odczytujesz ta ilsc elementow: // fragment otwierania pikufscanf(in,"%d",&ilosc);3. majac ilosc recordow odpalasz odpowiednia ilosc razy wczytywanie: //dwie ponizsze linijki tylko jesli jest to poczatkowe budowanie listy.//jesli lista jest juz zaczeta to przechpdisz do jej ostatniego elementu.element HEAD;element *wsk = HEAD;for(int i=0;i<ilosc;i++){ wsk->next = (element)malloc((unsigned)sizeof(wskaznik)); wsk = wsk->next; fscanf(in, "%i", &wsk->numer); fscanf(in, "%s", wsk->tytol); fscanf(in, "%s", wsk->autor); fscanf(in, "%s", wsk->gatunek);}lista = HEAD; Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
d3ugi Opublikowano 6 Czerwca 2005 Zgłoś Opublikowano 6 Czerwca 2005 czy mogłbyś troszeczke bardziej mi to rozjaśnic ? bo wprowadziłem te poprawki i chyba cos zle robie bo wywala mi blad naruszenie segmentacji :( czy moglbys dokladniej napisac co poprwaic z gory thx .... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ayem Opublikowano 7 Czerwca 2005 Zgłoś Opublikowano 7 Czerwca 2005 na ktorym kwalku ci sie wywala? dodaj sobie printf("cos"); i przestaiwja e wrozne linijki powiedz na korej sie wysypuje Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
d3ugi Opublikowano 7 Czerwca 2005 Zgłoś Opublikowano 7 Czerwca 2005 wywala sie w petli for... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ayem Opublikowano 7 Czerwca 2005 Zgłoś Opublikowano 7 Czerwca 2005 sprobuj poprawic: wsk->next = (element)malloc((unsigned)sizeof(wskaznik)); na wsk->next = (element*)malloc((unsigned)sizeof(wskaznik)); dawaj dokldaniejsze opisy - co sie wywala, jak, co juz sprawdziles Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
d3ugi Opublikowano 8 Czerwca 2005 Zgłoś Opublikowano 8 Czerwca 2005 (edytowane) sizeof(wskaznik) co to za zmienna wskaznik ? bo ztym jest problem ? wsk = (element*)malloc((unsigned)sizeof(in)); - prz takim zapisie sie odczytuje tylko wypisuje smieci przy wsk->next nie dziala wogole i sie wysypoje podczas dzialania programu i probie odczytania Edytowane 8 Czerwca 2005 przez d3ugi Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ayem Opublikowano 8 Czerwca 2005 Zgłoś Opublikowano 8 Czerwca 2005 hmm sorki - mialo byc sizeof(element) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...