Hej,
mam do napisania programik który wczytuje z pliku tekstowego 5 rekordów(1 rekord to nr indeksu nazwisko i ocena studenta) do jednokierunkowej listy przy okazji wyświetlająć obecnie dodawany rekord,po czym odwrócenie kolejności listy i odczytanie jej z nowym porzadkiem,czyli cos jak:
1 2 3 4 5 -> 5 4 3 2 1
Problem mam taki ze lista niby sie odwraca bo odczytuje ostatni rekord listy przed odwróceniem ale odczytuje go 5 razy czyli mam:
1 2 3 4 5-> 5 5 5 5 5 i zbytnio nie wiem czemu nie odczytuje reszty rekordow ;/
algorytm od odwracania listy zerżnąłem z internetu i w sumie to średnio go dalej rozumiem ale niby dziala xd
Dostane jakieś tipy? ;/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>
struct student {
int nr_indeksu;
char nazwisko[30];
float ocena;
struct student *nast;
};
typedef struct student LIST;
int main()
{
LIST *glowa = NULL, *poprz, *biezacy, *nast;
char nazwisko[30];
float ocena;
int nr_indeksu;
FILE* fp;
if ((fp = fopen("dane.txt", "r")) == NULL)
exit(1);
while (!feof(fp))
{
fscanf(fp, "%d %s %f", &nr_indeksu, nazwisko, &ocena);
biezacy = (LIST*)malloc(sizeof(LIST));
if (glowa == NULL)
glowa = biezacy;
else
poprz->nast = biezacy;
biezacy->nast = NULL;
biezacy->nr_indeksu = nr_indeksu;
strcpy(biezacy->nazwisko, nazwisko);
biezacy->ocena = ocena;
printf("Teraz wczytuje...\n");
Sleep(1000);
printf("Indeks: %d Student:%s Ocena:%0.1f\n", biezacy->nr_indeksu, biezacy->nazwisko, biezacy->ocena);
poprz = biezacy;
}
fclose(fp);
printf("\n\n\n");
LIST *tmp, *pom;
if (glowa == NULL)
{
printf("brak elementow\n");
}
else
{
tmp = glowa;
while (tmp->nast != NULL)
{
pom = tmp->nast;
tmp->nast = pom->nast;
pom->nast = glowa;
glowa = pom;
}
}
while (glowa!=NULL)
{
printf("Indeks: %d Student:%s Ocena:%0.1f\n", biezacy->nr_indeksu, biezacy->nazwisko, biezacy->ocena);
glowa = glowa->nast;
}
return 0;