• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zapis danych z pliku do listy jednokierunkowej

Object Storage Arubacloud
0 głosów
1,733 wizyt
pytanie zadane 12 maja 2017 w C i C++ przez AndekQR Użytkownik (880 p.)
void odczyt(struct dane **head)
{
    struct dane *nowy = (struct dane*)malloc(sizeof(struct dane));
    struct dane *point = *head;
    char bufor[30];
    printf("zmienne\n");
    FILE *plik;
    plik = fopen("test.txt", "r");

    if(plik == NULL)
        printf("Błąd podczas otwierania pliku!");
    else
    {
        while(fscanf(plik, "%d", bufor) != EOF)
        {
            struct dane *nowy = (struct dane*)malloc(sizeof(struct dane));
            printf("wejscie w while\n");

            nowy->next = NULL;

            nowy->id = (int*)malloc(sizeof(int));
            strcpy(nowy->id, bufor);

            fscanf(plik, "%s", bufor);
            strcpy(nowy->tytul, bufor);

            fscanf(plik, "%d", bufor);
            nowy->rok = (int*)malloc(sizeof(int));
            strcpy(nowy->rok, bufor);

            fscanf(plik, "%d", bufor);
            nowy->stan = (int*)malloc(sizeof(int));
            strcpy(nowy->stan, bufor);

            fscanf(plik, "%d", bufor);
            nowy->przesluchany = (int*)malloc(sizeof(int));
            strcpy(nowy->przesluchany, bufor);

            printf("po wszystkich strcpy\n");

            if(*head == NULL)
            {
                *head = nowy;
                printf("head = nowy\n");
            }
            else
            {
                while(point->next != NULL)
                {
                    point = point->next;
                    printf("point = point->next\n");
                }
                point->next = nowy;
                printf("point->next=point\n");
            }
        }
    }
    printf("odczyt udany");
    fclose(plik);
}

 

Witam

 

Mam problem z wczytywaniem danych do listy jednokierunkowej. Co należy zmienić w funkcji aby działała? 

Z góry dziękuje!

Plik z którego czyta wygląda tak: 

2
roko
1992
0
1

1
enej
2001
0
1

 

1 odpowiedź

0 głosów
odpowiedź 12 maja 2017 przez j23 Mędrzec (194,920 p.)
wybrane 12 maja 2017 przez AndekQR
 
Najlepsza

Tak na szybko:

if(*head == NULL)
{
        *head = point = nowy;
        printf("head = nowy\n");
}
void odczyt(struct dane **head)
{
	struct dane *nowy = (struct dane*)malloc(sizeof(struct dane)); //<--- po co ten 'nowy'...
	...
	
	 while(fscanf(plik, "%d", bufor) != EOF)
     {
		struct dane *nowy = (struct dane*)malloc(sizeof(struct dane)); // <--- ...jeśli jest ten?
		...

 

komentarz 12 maja 2017 przez AndekQR Użytkownik (880 p.)
Nie zauważyłem pierwszej linijki. Wczytuje już poprawną liczbę węzłów, lecz pole id nadal ma jakieś kosmiczne wartości.
komentarz 12 maja 2017 przez j23 Mędrzec (194,920 p.)

Sprawdź debugerem, czy fscanf poprawnie wczytuje tą wartość.

komentarz 12 maja 2017 przez AndekQR Użytkownik (880 p.)
Jeśli dobrze to wykonałem to w oknie "watch" debugera jest poprawna wartości pola id.
komentarz 12 maja 2017 przez j23 Mędrzec (194,920 p.)
To może coś z wyświetlaniem tej wartości jest nie tak. Trudno powiedzieć...
komentarz 12 maja 2017 przez AndekQR Użytkownik (880 p.)
Jakoś już sobie z tym poradzę, dziękuje za pomoc.

Podobne pytania

0 głosów
0 odpowiedzi 441 wizyt
0 głosów
1 odpowiedź 606 wizyt
pytanie zadane 19 stycznia 2019 w C i C++ przez dzuulie Nowicjusz (120 p.)
0 głosów
1 odpowiedź 155 wizyt
pytanie zadane 30 marca 2018 w JavaScript przez kubekszklany Gaduła (3,190 p.)

92,539 zapytań

141,382 odpowiedzi

319,476 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...