C'de if-else if-else deyimi hakkında

Başlatan emachines, 19 Mayıs 2011, 11:36:04

emachines

Merhaba arkadaşlar. Şöyle bir sorum var:

Bit değişkenleri olan a0,a1,a2,...a7 olarak adlandırılmış , bit olarak tanımlı 8 değişkenin 1 ya da 0 olma durumlarına göre "sonuc" adında bir değişkene
değerler yüklemek istiyorum.
Fakat bu değerlendirmede şöyle bir kısıtlama var: a0'dan test etmeye başlanacak ve ilk 1 yakalandığında kontrol sona erecek, sonraki bit değişkenler kontrol edilmeyecek.
Şu şekilde yaptım:

       if(a0) sonuc=1;
else if(a1) sonuc=2;
else if(a2) sonuc=3;
else if(a3) sonuc=4;
else if(a4) sonuc= 5;
else if(a5) sonuc=6,
else if(a6) sonuc=7;
else if(a7) sonuc=8;


Bu ifade şekli doğru mudur? Örneğin a0 ve a1==0 ise, a2==1 ise, sonuc değişkenine 3 değeri yüklenecek.
peki a4 de 1 ise, sonuc değişkenine 5 yüklenir mi,yoksa if-else if değerlendirmesi oradan itibaren sonlanır mı?

Bu arada if-else if'ten sonra "else" kullanılmadı çünkü o kısımda, tüm bitlerin 0 olması durumunda kod, sonuc'a değer yüklemeden sürmeli, yani bu kısmı pas geçmeli.

C'de tecrübeli arkadaşlardan yardım bekliyorum.Şimdiden teşekkür ederim.

JKramer

a2 (daha doğrusu a4 öncesinde herhangi biri) 1 olduğu sürece hiçbir zaman a4 şartını kontrol etmeyecek. Bu şekilde istediğiniz gibi yani.

vitruvius

Break komutu kullanarak döngüden çıkabilirsiniz. Tabi break komutu kullanmanız için switch, for yada while döngüsüne girmeniz gerekir. Şartları a0=1 mi diye kontrol edip eşit bulursanız sonuc değişkenini atayıp break ile çıkarsınız ve program alt satıra inmez.

Basit bir şekilde textboxlar içindeki sayılar 1 mi değil mi diye bir kod yazıp sonuc değişkenini label'a yazdırdım. a0, a1... değişkenlerini siz nerden alıyorsunuz bilemediğim için ben textboxtan aldım. Aynı mantıkta kodunuzu geliştirebilirsiniz. İlk iki bölümü kopyalıyorum:

for (i = 0; i < 10; i++)
            {
                if (a0 == 1)
                {
                    sonuc = 0;
                    break;
                }
                else if (a1 == 1)
                {
                    sonuc = 1;
                    break;
                }
}
label1.Text = sonuc.ToString();


Takıldığınız yerde tekrar sorarsınız. İyi çalışmalar.

gyb elektronik

Aslında C de "else if" diye bir kalıp yoktur. Ne demek istediğimi aşağıdaki kodları inceleyerek anlayabilirsiniz;

if (durum1) sonuc = 1;
else if (durum2) sonuc = 2;
else if (durum3) sonuc = 3;

if (durum1)
     sonuc = 1;
else
     if (durum2)
          sonuc = 2;
     else
          if (durum3)
               sonuc = 3;

ve bir de parantezleri eklersek;
if (durum1) {
     sonuc = 1;
} else {
     if (durum2) {
          sonuc = 2;
     } else {
          if (durum3) {
               sonuc = 3;
          }
     }
}


Artık "else if" in sonunda "else" olmuş mu olmamış mı farketmediğini görmüşsünüzdür.

emachines

Arkadaşlar,   If-else if'li şekliyle kod istediğim gibi çalıştı.
Sn gyb elektronik,  sizin bahsettiğiniz şekilde (else if kullanmadan) (sanırım standart c ile) bunu gerçekleştirmek istesek, ne gibi ifadeler kullanmalıyız?

bocek

şöyle de olur:
sonuc = a0 ? 1 : a1 ? 2 : a2 ? 3 : a3 ? 4 : a4 ? 5 : a5 ? 6 : a6 ? 7 : a7 ? 8 : sonuc;
1 ya da 0. işte 'bit'ün mesele..

muhittin_kaplan

basic de select case
c de swicth i araştırınız ?