Cześć,mam do napisania program który wczytuje z pliku do listy dynamicznej dwukierunkowej trochę rekordów gdzie 1 rekord to
numer pomiaru,numer czujnika wykonującego pomiar(ich jest 4),data i czas,temperatura. A następnie dzieli te listę źródłową na cztery mniejsze(1 czujnik=1lista) po przez wyjmowanie elementu z listy głównej i dodawaniu go do jeden z pozostałych 4 list. I tu mam problem z funkcja podziel_liste() bo z tego co zaobserwowałem to wykonuje sie tylko 4 razy,czyli pewnie działa tylko alokacja głów każdej z listy a dalej już nie :/ Elementy dodaje na koniec listy. Bede bardzo wdzięczny za jakieś tipy :)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct pomiar {
unsigned int nr_pomiaru;
unsigned int nr_czujnika;
char data_i_czas[20];
double temp;
struct pomiar *nast;
struct pomiar *poprz;
}*glowa = NULL, *glowa1 = NULL, *glowa2 = NULL, *glowa3 = NULL, *glowa4 = NULL;
struct pomiar* nowy_el(int nr_pom, int nr_czuj, char *data, double temp);
void umiesc(int nr_pom, int nr_czuj, char *data, double temp);
void wypisz_liste();
void podziel_liste();
int main()
{
unsigned int nr_pomiaru;
unsigned int nr_czujnika;
char data_i_czas[20];
double temp;
char nazwa_pliku[20];
printf("Podaj nazwe pliku z danymi:\n");
scanf("%s", nazwa_pliku);
strcat(nazwa_pliku, ".txt");
FILE *plik;
if ((plik = fopen(nazwa_pliku, "r")) == NULL)
{
printf("Nie otwarto pliku");
exit(0);
}
else
printf("Otwarto plik\n");
while (!feof(plik))
{
fscanf(plik, "%d %d %s %lf", &nr_pomiaru, &nr_czujnika, data_i_czas, &temp);
umiesc(nr_pomiaru, nr_czujnika, data_i_czas,temp);
}
fclose(plik);
wypisz_liste();
podziel_list();
return 0;
}
struct pomiar* nowy_el(int nr_pom, int nr_czuj, char *data, double temp)
{
struct pomiar *nowy = malloc(sizeof(struct pomiar));
nowy->nr_pomiaru = nr_pom;
nowy->nr_czujnika = nr_czuj;
strcpy(nowy->data_i_czas, data);
nowy->temp = temp;
nowy->poprz = NULL;
nowy->nast = NULL;
return nowy;
}
void umiesc(int nr_pom, int nr_czuj, char *data, double temp)
{
struct pomiar *tmp = glowa;
struct pomiar *nowy = nowy_el(nr_pom, nr_czuj, data, temp);
if (glowa == NULL)
{
glowa = nowy;
return;
}
while (tmp->nast != NULL) tmp = tmp->nast;
tmp->nast = nowy;
nowy->poprz = tmp;
}
void podziel_liste()
{
struct pomiar *tmp = glowa;
int lista1=0, lista2=0, lista3=0, lista4 = 0;
struct pomiar *tmp1=glowa1, *tmp2=glowa2, *tmp3=glowa3, *tmp4=glowa4;
while (tmp != NULL)
{
if (tmp->nr_czujnika == 1)
{
if (glowa1 == NULL)
{
glowa1=tmp1 = tmp;
lista1++;
}
else
{
while (tmp1->nast != NULL) tmp1 = tmp1->nast;
tmp1->nast = tmp;
tmp->poprz = tmp1;
lista1++;
}
}
if (tmp->nr_czujnika == 2)
{
if (glowa2 == NULL)
{
glowa2 =tmp2= tmp;
lista2++;
}
else
{
while (tmp2->nast != NULL) tmp2 = tmp2->nast;
tmp2->nast = tmp;
tmp->poprz = tmp2;
lista2++;
}
}
if (tmp->nr_czujnika == 3)
{
if (glowa3 == NULL)
{
glowa3 =tmp3= tmp;
lista3++;
}
else
{
while (tmp3->nast != NULL) tmp3 = tmp3->nast;
tmp3->nast = tmp;
tmp->poprz = tmp3;
lista3++;
}
}
if (tmp->nr_czujnika == 4)
{
if (glowa4 == NULL)
{
glowa4 =tmp4= tmp;
lista4++;
}
else
{
while (tmp4->nast != NULL) tmp4 = tmp4->nast;
tmp4->nast = tmp;
tmp->poprz = tmp4;
lista4++;
}
}
tmp = tmp->nast;
}
printf("Liczba elementow w liscie 1:%d",lista1);
printf("Liczba elementow w liscie 2:%d",lista2);
printf("Liczba elementow w liscie 3:%d",lista3);
printf("Liczba elementow w liscie 4:%d",lista4);
}
void wypisz_liste()
{
struct pomiar *tmp = glowa;
printf("1 element listy: %d %d %s %0.1lf\n", tmp->nr_pomiaru, tmp->nr_czujnika, tmp->data_i_czas, tmp->temp);
while (tmp->nast != NULL)
{
tmp = tmp->nast;
}
printf("Ostatni element listy: %d %d %s %0.1lf\n", tmp->nr_pomiaru, tmp->nr_czujnika, tmp->data_i_czas, tmp->temp);
}