Dzięki wielkie, sporo się rozjaśniło. Jeszcze drobne 2 pytania.
- Chcę odwołać się do konkretnego pola, np. nazwisko. Czy jest różnica między:
dane.nazwisko
dane->nazwisko
Czy
->
używa się, gdy mamy do czynienia ze wskaźnikiem? ( wywnioskowałem z kodu )
2. Chciałem dodać nowe pole data ( data urodzenia ).
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Student
{
char nazwisko[15];
char imie[15];
char data[10];
int wiek;
struct Student *nast;
};
int main()
{
struct Student dane, *tmp, *tail=NULL, *head=NULL; /* =NULL; -> inicjalizacja */
FILE* plik=fopen("student.txt", "r");
while(fscanf(plik, "%s %s %s %d", dane.nazwisko, dane.imie, dane.data, &dane.wiek)==4) /* dopóki udało się wczytać */
{
tmp=(struct Student*)malloc(sizeof(struct Student)); /* przydzielenie pamięci */
*tmp=dane; /* przekopiowanie wczytanych danych */
tmp->nast=NULL; /* jak na razie brak następnego */
if(tail) tail->nast=tmp; /* jeżeli jest ostatni, to wstań za nim */
else head=tmp; /* jeżeli nie ma to jesteś pierwszy */
tail=tmp; /* skoro wstałeś do kolejki to jesteś ostatnim */
}
fclose(plik);
for(tmp=head; tmp; tmp=tmp->nast) /* od głowy ; dopóki mamy kolejnego ; przejdź do następnego */
{
printf("%s %s %s %d\n", tmp->nazwisko, tmp->imie, tmp->data, tmp->wiek);
}
return 0;
}
Wszystko działa, tylko występuje problem przy wypisaniu, dokładnie taki:
Po dacie ( zasadniczo w niej ) pojawia się dodatkowy znak.
EDIT: Problem zniknął, gdy zmieniłem:
struct Student
{
char nazwisko[15];
char imie[15];
char data[10];
int wiek;
struct Student *nast;
};
na:
struct Student
{
char nazwisko[15];
char imie[15];
char data[11];
int wiek;
struct Student *nast;
};
Ma to związek, z ostatnim elementem tablicy, którym jest '\0'?