• 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
142 wizyt
pytanie zadane 12 maja 2017 w C i C++ przez AndekQR Użytkownik (860 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 (89,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 (860 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 (89,240 p.)

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

komentarz 12 maja 2017 przez AndekQR Użytkownik (860 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 (89,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 (860 p.)
Jakoś już sobie z tym poradzę, dziękuje za pomoc.

Podobne pytania

0 głosów
0 odpowiedzi 68 wizyt
0 głosów
1 odpowiedź 37 wizyt
pytanie zadane 19 stycznia w C i C++ przez dzuulie Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 126 wizyt
pytanie zadane 21 lutego 2017 w Java przez plkpiotr Stary wyjadacz (12,520 p.)
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.Komentarze

60,207 zapytań

105,878 odpowiedzi

219,906 komentarzy

32,422 pasjonatów

Przeglądających: 180
Pasjonatów: 3 Gości: 177

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.

...