Lista wyświetlanie

0

Program ma wyświetlać wybraną ilość struktur i ma być oparty na listach. Wyświetla się tylko pierwsza dodana struktura, w kolejnych liczby z kosmosu. Proszę o pomoc.

#include <stdio.h>
#include <stdlib.h>

int *wskg[10], *wskm[10], *wskd[10], *wskmi[10], *wskr[10];
float *wsktemp[10], *wskwilg[10], *wskcis[10], *wskwiatr[10];

struct lista {
    int datag[10];
    int datam[10];
    int datad[10];
    int datami[10];
    int datar[10];
    float temp[10];
    float wilg[10];
    float cis[10];
    float wiatr[10];
    struct lista * next;
};

typedef struct lista element;


void main()
{
element * biezacy, * poczatek;
int i, j;
poczatek = NULL;
printf("Ile wynikow chcesz dodac?");
scanf("%d",&j);

int datag[10], datam[10], datad[10], datami[10], datar[10];
float temp[10], wilg[10], cis[10], wiatr[10];

for(i=0;i<j;i++)
{
    printf( "Podaj godzine: " );
    scanf( "%d", & datag[i] );
    wskg[i]=&datag[i];
    printf( "Podaj minute: " );
    scanf( "%d", & datam[i] );
    wskm[i]=&datam[i];
    printf( "Podaj dzien: " );
    scanf( "%d", & datad[i] );
    wskd[i]=&datad[i];
    printf( "Podaj miesiac: " );
    scanf( "%d", & datami[i] );
    wskmi[i]=&datami[i];
    printf( "Podaj rok: " );
    scanf( "%d", & datar[i] );
    wskr[i]=&datar[i];
    printf( "Podaj temperature [stopnie Celsjusza]: " );
    scanf( "%f", & temp[i] );
    wsktemp[i]=&temp[i];
    printf( "Podaj wilgotnosc [%%]: " );
    scanf( "%f", & wilg[i] );
    wskwilg[i]=&wilg[i];
    printf( "Podaj cisnienie [hPa]: " );
    scanf( "%f", & cis[i] );
    wskcis[i]=&cis[i];
    printf( "Podaj predkosc wiatru [km/h]: " );
    scanf( "%f", & wiatr[i] );
    wskwiatr[i]=&wiatr[i];
    printf( "\n" );

    biezacy =( element * ) malloc( sizeof( element ) );
    biezacy->datag[i] = *wskg[i];
    biezacy->datam[i] = *wskm[i];
    biezacy->datad[i] = *wskd[i];
    biezacy->datami[i] = *wskmi[i];
    biezacy->datar[i] = *wskr[i];
    biezacy->temp[i] = *wsktemp[i];
    biezacy->wilg[i] = *wskwilg[i];
    biezacy->cis[i] = *wskcis[i];
    biezacy->wiatr[i] = *wskwiatr[i];
    biezacy->next = poczatek;
    poczatek = biezacy;

    biezacy = poczatek;
}

for(i=0;i<j;i++)
{
    while( biezacy )
    {
    printf( "Godzina %d:%d Dnia %d.%d.%d\nTemperatura: %f stopni C\nWilgotnosc: %2.f %%\nCisnienie: %f hPa\nPredkosc wiatru: %f km/h\n\n",
    biezacy->datag[i],
    biezacy->datam[i],
    biezacy->datad[i],
    biezacy->datami[i],
    biezacy->datar[i],
    biezacy->temp[i],
    biezacy->wilg[i],
    biezacy->cis[i],
    biezacy->wiatr[i] );
    biezacy = biezacy->next;
poczatek = biezacy;

    biezacy = poczatek;

    }
}


    getch();
    return 0;
}

 
3

Zacząć od byle kursu po czym wywalić powyższe i napisać od nowa.

0

Program nie jest zły, jest problem tylko z wyświetlaniem.

1
  1. Nie masz pojęcia o formatowaniu kodu: http://4programmers.net/Forum/998482
  2. Nie rozumiesz inkrementacji: http://4programmers.net/Forum/1101404
  3. Każdy element listy jest przeznaczony na 10 pomiarów.
  4. Wypełniasz w sposób niesamowicie dziwaczny
    a tak nie jest zły, dla kosza w sam raz.
1

Każdy element listy ma być przeznaczony na 10 pomiarów. Zmiana i++ na ++i nie jest tutaj istotna.

0

Nie wiem lepiej. Po prostu zmiana i++ na ++i nic tutaj nie zmieniła.

0

Mianowicie chodzi o ten moment:

for(i=0;i<j;++i)
{
    while( biezacy )
    {
    printf( "Godzina %d:%d Dnia %d.%d.%d\nTemperatura: %f stopni C\nWilgotnosc: %2.f %%\nCisnienie: %f hPa\nPredkosc wiatru: %f km/h\n\n",
    biezacy->datag[i],
    biezacy->datam[i],
    biezacy->datad[i],
    biezacy->datami[i],
    biezacy->datar[i],
    biezacy->temp[i],
    biezacy->wilg[i],
    biezacy->cis[i],
    biezacy->wiatr[i] );
    biezacy = biezacy->next;
poczatek = biezacy;

    biezacy = poczatek;

    }
} 

[/code]

0
Fafkorn napisał(a):

Nie wiem lepiej. Po prostu zmiana i++ na ++i nic tutaj nie zmieniła.

Dokładnie, za to jest niebezpieczeństwo, że w niektórych przypadkach zamiast np. od 0 do 10 program policzy od 1 do 11.

0

Zapisujesz dziwne rzeczy, więc odczytujesz też dziwne rzeczy.
Czemu wypełniasz tylko 1 z 10 elementów w strukturze?

Zmiany musisz zacząć od struktury, ma być tak:

typedef struct
  {
   time_t when;
   float temp,wilg,cis,wiatr;
  } Data;
typedef struct Node
  {
   Data data[10];
   struct Node *next;
  } Node;
typedef struct
  {
  Node *head;
  } List;

List L={NULL};

albo tak:

typedef struct
  {
   time_t when;
   float temp,wilg,cis,wiatr;
  } Data;
typedef struct Node
  {
   Data data;
   struct Node *next;
  } Node;
typedef struct
  {
  Node *head;
  } List;

List L[10]={{NULL}};

ale jednak podejrzewam że musi być tak:

typedef struct
  {
   time_t when;
   float temp,wilg,cis,wiatr;
  } Data;
typedef struct Node
  {
   Data data;
   struct Node *next;
  } Node;
typedef struct
  {
  Node *head;
  } List;

List L{NULL};

dokładniej z twego kudu nie da się odczytać.

0

Wypełniam "j" elementów, tyle ile ktoś sobie wybierze, liczba ma być mniejsz/równa 10.

1
  1. Czy rozumiesz, że w 3-ch elementach twojej listy mieści się 30 pomiarów?
  2. Czy rozumiesz, że twój kod umieszcza w 3-ch elementach twojej listy tylko 3 pomiary?
  3. Czy rozumiesz, że przy tak niedorzecznym wypełnieniu prawie nie możliwe zrobić odpowiednio niedorzeczne wyświetlenie?
  4. Czy rozumiesz, że nigdzie nie wyjaśniłeś czym jest te 10 i jak są związane z listą?
0

Tylko dlaczego pierwszą strukturę wypełnia poprawnie?

0

Jak mam połączyć liczbę 10 z listą?

1
Fafkorn napisał(a):

Jak mam połączyć liczbę 10 z listą?
W dowolnej pozycji - czytaj Kamasutrę.
A tak na serio, skąd ja mogę wiedzieć czym jest ta 10?
Zadałem ci to pytanie - zignorowałeś, zresztą jak pozostałe.

0

10 to jest maksymalna liczba struktur do wczytania i wyświetlania.

0

Dla listy takie ograniczenie jest całkowicie bezsensowne.
Więc, albo potrzebujesz ten 3-ci wariant struktur, albo źle zrozumiałeś zadanie i nie chodziło o listę w sensie informatycznym zaś o listę pomiarów realizowanych za pomocą tablicy 10-elementowej, czyli:

typedef struct
  {
   time_t when;
   float temp,wilg,cis,wiatr;
  } Data;

Data Tb[10];
0

Chodziło o listę w sensie informatycznym.
A te deklaracje struktur po wrzuceniu do programu nie działają.

1

Oczywiście że nie działają, teraz pod nie trzeba odpowiednio program zmienić.

0

A z mojego programu nie da się już nic uzyskać?

0

Już wszystko działa, dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1