• 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

0 głosów
116 wizyt
pytanie zadane 12 maja 2017 w C i C++ przez AndekQR Użytkownik (840 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 Szeryf (82,240 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 (840 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 Szeryf (82,240 p.)

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

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

Podobne pytania

0 głosów
0 odpowiedzi 61 wizyt
0 głosów
0 odpowiedzi 123 wizyt
pytanie zadane 21 lutego 2017 w Java przez plkpiotr Stary wyjadacz (12,520 p.)
0 głosów
1 odpowiedź 55 wizyt
pytanie zadane 10 stycznia 2017 w C i C++ przez kroliczysyn Początkujący (400 p.)
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.Najlepsza odpowiedź

57,748 zapytań

102,788 odpowiedzi

212,076 komentarzy

29,694 pasjonatów

Przeglądających: 329
Pasjonatów: 14 Gości: 315

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...