struct elemanlarına naıl erişilir ?

Başlatan ilhan_mkp, 12 Eylül 2015, 11:24:57

ilhan_mkp

char idx;

struct PARAMETRE{
                                char PAR1;
                                char PAR2;
                                float PAR3;
                               char PAR4;
                               float PAR5;
                               };

struct PARAMETRE prg[99]


yukarıdaki gibi bir struct var idx değişkenim 2 olduğunda par2 3 olduğunda par 3 elemanına nasıl erişebilirim.

sovalye

hocam, erişebilirim derken, tam olarak ne yapmak istiyorsunuz ? if-else yazıp istediğiniz koşula bakıp, istediğiniz elemana ulaşabilirsiniz ama başka birşey yapmak istiyorsanız anlayamadım.

ilhan_mkp

hocam struct elemanlarını lcdye yazmak için
idx 1 ise par1 satır 1 par2 satır 2 par3 satır 3 par4 satır4
idx 2 ise par2 satır 1 par3 satır 2 par4 satır 3 par5 satır4

bu şekilde idx değişkenini değiştirip struct elemanlarını lcdye yazmak için

sovalye

if(idx=='1'){
LCD_yaz(prg[i].PAR1,prg[i].PAR2,prg[i].PAR3,prg[i].PAR4);
}
else if(idx=='2'){
LCD_yaz(prg[i].PAR2,prg[i].PAR3,prg[i].PAR4,prg[i].PAR5);
}


i prg dizisinin kaçıncı elemananı eriştiğinizi göstermek için.

ilhan_mkp

const char *const PARAMETRE_LABEL[] =
{
"par1",
"par2",
"par3",
"par4",
"par5"
};

           SATIR_1_IDX=PARAMETRE_LABEL_IDX;
           SATIR_2_IDX=PARAMETRE_LABEL_IDX +1;
           SATIR_3_IDX=PARAMETRE_LABEL_IDX+2;
           SATIR_4_IDX=PARAMETRE_LABEL_IDX+3;
           
           lcd_out(1,2,PARAMETRE_LABEL[SATIR_1_IDX]);  // lcd satır 1

           lcd_out(2,2,PARAMETRE_LABEL[SATIR_2_IDX]); //lcd satır 2

           lcd_out(3,2,PARAMETRE_LABEL[SATIR_3_IDX]); //lcd satır 3

           lcd_out(4,2,PARAMETRE_LABEL[SATIR_4_IDX]); //lcd satır 4


kodu kısatmak için buna benzer bir halde lcdye yazmak için bir yöntem varmı diye sordum.
if else ile kod çok fazla uzayacak gibi görünüyor.

Klein

Doğrudan o şekilde erişmeniz mümkün değil. Ancak başka bir tabloda Struct içerisindeki her verinin boyunu veya adres offsetini (böylesi daha kolay) tutarak erişmeniz mümkün.
Fakat veri tipleri farklı olduğu için yapı elemanının tipini öğrenmek için başka bir tablo kullanmanız ve veriyi işlerken bu veri tipine göre bazı karşılaştırma işlemi gerekecektir.
Eğer Struct kısa ve veri çeşiti fazla ise, değmez. Ancak Struct uzun ise ve veri çeşiti az ize verimli bir yöntem olabilir.
 

ilhan_mkp

Klein hocam lcd ye basmak için hepsini string yaptım string array dan bu şekilde alabiliyorum.
Yazılımcı değilim bu yüzden saçma bir yöntem kullanıyorum diye düşündüm.