Ad 1. Zainicjalizować/przypisać np. zmienna=13;
Ad 2. Którego słowa nie rozumiesz?
Problemem jest zrozumienie czym jest lista.
Doprawdy? Taki to problem na Wikipedię zajrzeć https://pl.wikipedia.org/wiki/Lista? Nawet obrazek jest.
Tak należy przydzielać pamięć do każdej dynamicznej struktury, przy czym tylko dla dynamicznych tablic robimy to raz na cała tabelkę rekordów, dla pozostałych przydzielamy na każdy rekord osobno.
Zauważyłem że próbujesz pomagać innym, wiec masz:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Student
{
char nazwisko[15];
char imie[15];
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 %d",dane.nazwisko,dane.imie,&dane.wiek)==3) /* 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 %d\n",tmp->nazwisko,tmp->imie,tmp->wiek);
}
return 0;
}