Dynamiczna alokacja tablicy struktur + wskaźniki do struktur

0

Mam 2 problemy z prostym programem wypisującym imię najstarszej osoby z tablicy struktur . Pierwszy i bardziej naglący to ten dotyczący wczytywania danych do struktury. Podając n=2 mogę wczytać tylko 1 rekord (imię i rok urodzenia), dla n=4 mogę wczytać 2 itd. a podając liczbę nieparzystą program po prostu nie działa. Wydaje mi się, że to jakiś prosty błąd spowodowany zmęczeniem, ale pewny nie jestem.

Drugi problem jest taki, że nie do końca rozumiem jak ten program może działać (bo dla odpowiednio podanych danych faktycznie podaje imię najstarszej osoby). Deklaruje wskaźnik typu osoba, dynamicznie alokuję mu nsizeof(osoba)* pamięć, a potem normalnie operuję na kolejnych elementach struktury - jednak wydawało mi się, że do operacji na wskaźnikach muszę używać operatora "->", i jak patrzę na podobne programy na internecie to tam również posługują się tym operatorem, a u mnie za każdym razem wykrzacza. Mógłby ktoś wytłumaczyć, jak to działa?
(Wiem, że ten kod to w ogóle tragedia i syf z gilem, ale traktuje go jako trening różnych cech struktur, a nie jako coś faktycznie użytkowego)

#include <stdio.h>

struct Osoba{

    char imie[30];
    int ru;

};

typedef struct Osoba osoba;

osoba f(osoba *os1,int n){

    int i,max,a;
    max=2016-os1[0].ru;
    for(i=1;i<n;i++){
            if(2016-os1[i].ru>max){
                max=2016-os1[i].ru;
                a=i;
            }

    }
    return os1[a];

}


int main(){


    osoba *os;
    int n,l;
    scanf("%d",&n);
    os=malloc (n*sizeof(osoba));
    for(l=0;l<n;++l){
        fgets(os[l].imie,30,stdin);
        scanf("%d",&os[l].ru);
    }
    osoba max;
    max=f(os,n);
    printf("%s",max.imie); 
0
while(getchar()!='\n') {}
  • przed fgets()
0

nie mieszaj 2 systemów walutowych, czytaj linia po linii, tylko raz konwertuj do inta, a raz nie konwertuj, ewentualnie czytaj zawsze scanfem. Mieszanie zawsze bedzie odbijac sie czkawką.

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