wczytywanie danych do struktury

0

Jak wczytać do strukury dany przy pomocy funkcji? Jak zrobiłem funkcję czytaj, to potem wypisuje mi zupelnie co innego

#include<stdio.h>

struct rekord{
    char nazwa[10];
    float x,y,z;
};

void drukujRekord(struct rekord T){
    printf("%s :\n", T.nazwa);
    printf("x = %g, y = %g, z = %g\n", T.x, T.y, T.z);
}

void czytajRekord(struct rekord *S)
{
    scanf("%g %g %g",S->x, S->y, S->z);
}


int main(){
    struct rekord S;
    int n;
    /* uøyj funkcji czytajRekord, aby pobraÊ od uøytkownika i zapisaÊ w S dane  */
    czytajRekord(&S);
    drukujRekord(S);
   


    return 0;
}

1

scanf oczekuje adresów, użyj &. Jakiego kompilatora używasz, że o tym nie wspomina?

0

A jeszcze jedno pytanie:

zalokowanie pamięci na liczbę n elementów typu tej struktury będzie wyglądać tak?

 Ar = (struct rekord*)malloc(n * sizeof(struct rekord)); 

Ar to oczywiście wskaźnik a n to liczba int od użytkownika

1

To wygląda dobrze.

1
Daim123 napisał(a):

Jak wczytać do strukury dany przy pomocy funkcji? Jak zrobiłem funkcję czytaj, to potem wypisuje mi zupelnie co innego

struct rekord{
    char nazwa[10];
    float x,y,z;
};
Daim123 napisał(a):

A jeszcze jedno pytanie:

zalokowanie pamięci na liczbę n elementów typu tej struktury będzie wyglądać tak?

 Ar = (struct rekord*)malloc(n * sizeof(struct rekord)); 

Ar to oczywiście wskaźnik a n to liczba int od użytkownika

kq napisał(a):

To wygląda dobrze.

A mi nie.
Zadbał bym o alligment.

@Daim123 Czyli w tym przypadku do wielokrotności 4.
I na przyszłości (w miarę możliwości) struktury układaj od większych typów, do mniejszych.
W Twoim przypadku najpierw floaty, potem 12 znaków

1

malloc dba o alignment samodzielnie, wth

0

Tylko mam problem gdy chce zrobić free(Ar) taki jak na załączniku

3
Daim123 napisał(a):

Tylko mam problem gdy chce zrobić free(Ar) taki jak na załączniku

Masz masę ostrzeżeń (w praktyce błędów), bo nie inklududesz stdlib.h
MUSISZ uwzględniać ostrzeżenia, jako początkujący traktuj jest prawie jak błąd.

1
Daim123 napisał(a):

Tylko mam problem gdy chce zrobić free(Ar) taki jak na załączniku

wklejaj kod, a nie screenshoty (poprawiłbym, ale nie chce mi się przepisywać z ekranu)! Tak samo wklejaj teks komunikatów błędów ostrzeżeń.
W Xcode znajdziesz to tu: XCode.png

Albo wklejaj to do jakiegoś kompilatora online: https://4programmers.net/Forum/C_i_C++/311703-przydatne_narzedzia_online?p=1495680#id1495680

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