• 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
2,407 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 (195,220 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 (195,220 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 (195,220 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 676 wizyt
0 głosów
1 odpowiedź 937 wizyt
pytanie zadane 19 stycznia 2019 w C i C++ przez dzuulie Nowicjusz (120 p.)
0 głosów
1 odpowiedź 323 wizyt
pytanie zadane 30 marca 2018 w JavaScript przez kubekszklany Gaduła (3,250 p.)

93,605 zapytań

142,530 odpowiedzi

322,999 komentarzy

63,095 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

Kursy INF.02 i INF.03
...