#include <stdlib.h>
#include <stdio.h>
// struct asd{...}; yerine
// typedef struct{...}asd; yazmaya alışmalısın. Özellikle header dosyalarında struct tanımlayınca işine yarayacak.
typedef struct
{
char makam[30];
float maas;
int calistigiSene;
} calisanBilgi;
typedef struct
{
char ad[30];
char soyad[30];
int yas;
calisanBilgi bilgi;
}calisanlar;
void elemanBilgiGoster(calisanlar* x) //Burada pointer kullanma sebebim ise, fonksiyona verilen struct'ın bir kopyasını daha oluşturup bellek alanı kaplamamak. Bunun yerine referans da alabilirsin.
{
//UYARI: Fonksiyon parametresindeki pointer'a verdiğin veriyi silmeyi deneme. Tabii eğer malloc() ile oluşturduğun pointer'a ait nesneyi veriyorsan ve o nesneyi bir daha kullamayacaksan silebilirsin. Aksi halde kodun hata verir.
printf("%s %s %d %s %f %d\n", x->ad, x->soyad, x->yas, x->bilgi.makam, x->bilgi.maas, x->bilgi.calistigiSene);
}
int main()
{
calisanlar *calisanlarTamami = NULL; //Burada pointer kullanma sebebim dinamik olarak esneyebilen dizi tanımlamak. Kullanıcının gireceği kadar belleği ayırır.
int eklenecekEleman;
printf("Lutfen eklenecek eleman sayisini giriniz.\n");
scanf("%d", &eklenecekEleman); //scanf() fonksiyonunda referans kullan, böylece değişkenin olduğu adresteki veriye erişilebilecek ve değişkenin verisi fonksiyondan değiştirilebilecektir.
calisanlarTamami = malloc(eklenecekEleman*sizeof(calisanlar)); //Bellek allokasyonu (memory allocation -> malloc() [veya calloc(), senin tarzına bağlı.]). Fonksiyonu nasıl kullandığıma dikkat et.
for (int i = 0; i < eklenecekEleman; i++)
{
printf("%d. elemani giriniz.\n", i + 1);
scanf("%s %s %d %s %f %d", &calisanlarTamami[i].ad, &calisanlarTamami[i].soyad, &calisanlarTamami[i].yas, &calisanlarTamami[i].bilgi.makam, &calisanlarTamami[i].bilgi.maas, &calisanlarTamami[i].bilgi.calistigiSene);
//scanf'ten \n ibaresini kaldırdım. Çünkü öyle olunca \n'den bir önceki formatta bir karakter daha ister.
}
printf("Kaydedilen eleman bilgileri;\n");
for (int i = 0; i < eklenecekEleman; i++)
{
elemanBilgiGoster(&calisanlarTamami[i]);
}
free(calisanlarTamami); //Bellek alanını temizledim. Bunu unutma, yoksa kodunda açık bırakırsın.
return 0;
}