#C if/else blok oluştururken alınan hata

Bu konuyu okuyanlar

NeverTellLie

Öğrenci
Katılım
14 Nisan 2017
Mesajlar
56
Reaksiyon puanı
2
Puanları
8
Yaş
28
Öncelikle hayırlı ramazanlar:) Şu an if else if elseyi öğreniyorum if ve else basit ancak if elsenin diğerlerinden farkını anlayamadım ayrıca blok oluşturma işini kavrayamadım burada da sanırım blok ile ilgili hatalar yaptım ki program istediğim şekilde çalışmadı.Yardımcı olursanız sevinirim teşekkürler.:):D

Adsız.png
 
Son düzenleyen moderatör:

kmurat

Dekan
Katılım
8 Şubat 2014
Mesajlar
8,488
Çözümler
3
Reaksiyon puanı
3,711
Puanları
113
"else" satırında hata var. Oraya arguman girmemelisin. "if" = eğer, "else if" = yada eğer, "else" = yada anlamlarına gelirler ve de aynen o anlamda kullanılırlar. "else" diğer seçenekler geçersizse devreye girer.
 

arsenik

Rektör
Katılım
8 Ağustos 2009
Mesajlar
11,365
Reaksiyon puanı
242
Puanları
63
Kod:
#include <stdio.h>

int main()
{
    int number1 = 20, number2 = 2;
    int result = Sum(number1, number2);
    if(result < 0){
        printf("%d ve %d sayılarinin toplami %d olur ve bu sonuc sifirdan kucuktur.",number1,number2,result);
    }
    else if( result >= 0 && result < 20){
        printf("%d ve %d sayılarinin toplami %d olur ve bu sonuc ya sifira esittir ya da sifirdan buyuk 20den kucuktur.",number1,number2,result);
    }
    else{
        printf("%d ve %d sayılarinin toplami %d olur ve bu sonuc 20ye esit veya daha buyuktur.",number1,number2,result);
    }
  
}

int Sum(int firstNumber, int secondNumber){
    return firstNumber + secondNumber;
}

number1 ve number2 değişkenleri değiştirerek hangi if koşulunun içerisine neden girdiğini gözlemleyebilirsin.

if döngüsü içinde printf metodunda a,b kullanmışsın ama onu ekrana yazdıracak 2 değişken vermemişsin içerisine. Benim üstte yazdığım koddaki örneğe göre değiştirebilirsin.

Bir de sorularınızda yazdığınız kodu da ekleyin ki üstünden değiştirme ve düzeltme kolay olsun.
 

Ben Kenobi

Dekan
Katılım
6 Kasım 2011
Mesajlar
7,336
Reaksiyon puanı
3,155
Puanları
113
Yazdığın dil C# değil C++

Kod bloğu birden fazla satır içeren if-else,for,while gibi komutlarda, komutları gruplamak için kullanılır, aksi takdirde sadece ondan sonraki tek satır kod(satır ile kastettiğim ilk ; işaretine kadar olan yer) bu alana alınacaktır.
Kod bloğu demek ayrıca o alandaki kodlar, kendisine ayrılmış özel bir stack alanında çalışacak demektir.
Yani misal if bloğunda tanımladığın bir değişken, o bloğun dışına çıktığın anda yok edilir.

Kod bloğu oluştururken GNU standartlarını kullan.
Şöyle yapmanı önermem.
Kod:
if (result < 0) {
    printf("Ne haber");
}
else {
    printf("Ne haber");
}
GNU standartları der ki her kod bloğu simetrik olmalı ve tab karakteri 4 boşluğa denk gelmeli. Yani şunu kullanmanı öneririm.
Kod:
if (result < 0)
{
    printf("Ne haber");
}
else
{
    printf("Ne haber");
}

else meselesine geleyim.
Bu kod optimizasyon amacıyla vardır.
İstersen her ihtimali if ile yazabilirsin.
Ancak böyle yaparsan doğru sonuca ulaştıktan sonra kalan yanlış sonuçlar da tekrar gereksizce kontrol edilir.
Şöyle açıklayayım.
Elma sayısı 2 ise ve makine bunu bulduysa, elma sayısı 3 mü diye kontrol etmesine gerek yok.
Kod:
if (ElmaSayısı == 2)
{
    printf("Ne haber");
}
if (ElmaSayısı == 3)
{
    printf("Ne haber");
}
Eğer böyle yazsaydık ve elma sayısı 2 olsaydı, ikinci kısımdaki kontrol yani elma sayısının 3 olup olmadığı gereksiz şekilde tekrar kontrol edilirdi.
Kod:
if (ElmaSayısı == 2)
{
    printf("Ne haber");
}
else if (ElmaSayısı == 3)
{
    printf("Ne haber");
}
else
{
    printf("Ne haber");
}
Şimdi ise elma sayısının 2 olduğunu bulduktan sonra artık elma sayısı 3 mü veya başka birşey mi(else) kontrollerini yapmayacak, o kısımları atlayacak, bu da bize performans sağlayacak.
 

Ben Kenobi

Dekan
Katılım
6 Kasım 2011
Mesajlar
7,336
Reaksiyon puanı
3,155
Puanları
113
Her C aslında bir C++'dır ama her C++ her zaman C değildir. :D
 

NeverTellLie

Öğrenci
Katılım
14 Nisan 2017
Mesajlar
56
Reaksiyon puanı
2
Puanları
8
Yaş
28
Bir de sorularınızda yazdığınız kodu da ekleyin ki üstünden değiştirme ve düzeltme kolay olsun.
Bir dahakine dediğiniz gibi yaparım. Forumu pek bilmediğim için eksiklerim olabiliyor kusura bakmayın:)
--- Gönderi Güncellendi ---
Yazdığın dil C# değil C++

Kod bloğu birden fazla satır içeren if-else,for,while gibi komutlarda, komutları gruplamak için kullanılır, aksi takdirde sadece ondan sonraki tek satır kod(satır ile kastettiğim ilk ; işaretine kadar olan yer) bu alana alınacaktır.
Kod bloğu demek ayrıca o alandaki kodlar, kendisine ayrılmış özel bir stack alanında çalışacak demektir.
Yani misal if bloğunda tanımladığın bir değişken, o bloğun dışına çıktığın anda yok edilir.

Kod bloğu oluştururken GNU standartlarını kullan.
Şöyle yapmanı önermem.
Kod:
if (result < 0) {
    printf("Ne haber");
}
else {
    printf("Ne haber");
}
GNU standartları der ki her kod bloğu simetrik olmalı ve tab karakteri 4 boşluğa denk gelmeli. Yani şunu kullanmanı öneririm.
Kod:
if (result < 0)
{
    printf("Ne haber");
}
else
{
    printf("Ne haber");
}

else meselesine geleyim.
Bu kod optimizasyon amacıyla vardır.
İstersen her ihtimali if ile yazabilirsin.
Ancak böyle yaparsan doğru sonuca ulaştıktan sonra kalan yanlış sonuçlar da tekrar gereksizce kontrol edilir.
Şöyle açıklayayım.
Elma sayısı 2 ise ve makine bunu bulduysa, elma sayısı 3 mü diye kontrol etmesine gerek yok.
Kod:
if (ElmaSayısı == 2)
{
    printf("Ne haber");
}
if (ElmaSayısı == 3)
{
    printf("Ne haber");
}
Eğer böyle yazsaydık ve elma sayısı 2 olsaydı, ikinci kısımdaki kontrol yani elma sayısının 3 olup olmadığı gereksiz şekilde tekrar kontrol edilirdi.
Kod:
if (ElmaSayısı == 2)
{
    printf("Ne haber");
}
else if (ElmaSayısı == 3)
{
    printf("Ne haber");
}
else
{
    printf("Ne haber");
}
Şimdi ise elma sayısının 2 olduğunu bulduktan sonra artık elma sayısı 3 mü veya başka birşey mi(else) kontrollerini yapmayacak, o kısımları atlayacak, bu da bize performans sağlayacak.

Çok güzel izah etmişsiniz hocam teşekkürler.Hocam else if vb.lerde bir satır olursa parantez açmamıza gerek yok ya.Sizce onlarda da açmak daha yararlı olur mu (alışmak için vs.) yoksa sadece zaman kaybı mı olur?
--- Gönderi Güncellendi ---
Hocam yani else ile else if arasındaki fark şunlar: else'de mantıksal deyim kullanılmaz iken else if'de mantıksal deyim kullanılır ve else belirtilmemiş tüm değerleri kapsar else if ise if'deki değer haricinde belirtilmiş değerleri kapsar ve eğer if'deki değer geçerli olursa bilgisayarın tekrar else if'deki değeri kontrol etmez o bloğu atlar bu da bize performans sağlar.Doğru anlamış mıyım hocam?
 

Ben Kenobi

Dekan
Katılım
6 Kasım 2011
Mesajlar
7,336
Reaksiyon puanı
3,155
Puanları
113
Doğru anlamışsın.
Parantezleri simetrik yapman bana göre önemli ama diğeri senin kod yazma stiline bağlı.
Burada sıradan ve profesyonel programcıyı ayıran ince bir detay daha var.
Elinde üç ihtimal varsa misal, elmanın 3 olma ihtimali %60, 1 olma ihtimali %20, 2 olma ihtimali %10 ise, bunu if-else kısmında büyükten küçüğe sırala.
if(elma==3)
{
birşeyler();
}
else if(elma==1)
{
birşeyler
}
else
{
birşeyler
}
Bu sayede milyonluk for döngülerinde farkedebileceğin hız artışı elde edersin.
Aslında bunu derleyiciler pipeline üzerinde low-level multithreading yaparak bir miktar çözüyorlar ama yine de kısıtlı, yani belki 4 ihtimal varsa, tamamını farklı corelar üzerinde deneyip(Senin birşey yapmana gerek kalmadan) bulabiliyorlar ama işlemci core sayısı ihtimal sayısından düşükse olmuyor veya herhangi bir durum multithreading low-level pipeline yapılmasını engelliyorsa(misal kod döngü içindeyse ve döngüler için zaten multithreading yapılıyorsa) yine olmuyor.
O yüzden bu tarz bir alışkanlık kazanabilirsin.

Böyle ince bilgileri üniversite hocalarından duymazsınız, Ben Kenobi reyizinizden duyarsınız. :D
 

NeverTellLie

Öğrenci
Katılım
14 Nisan 2017
Mesajlar
56
Reaksiyon puanı
2
Puanları
8
Yaş
28
Doğru anlamışsın.
Parantezleri simetrik yapman bana göre önemli ama diğeri senin kod yazma stiline bağlı.
Burada sıradan ve profesyonel programcıyı ayıran ince bir detay daha var.
Elinde üç ihtimal varsa misal, elmanın 3 olma ihtimali %60, 1 olma ihtimali %20, 2 olma ihtimali %10 ise, bunu if-else kısmında büyükten küçüğe sırala.
if(elma==3)
{
birşeyler();
}
else if(elma==1)
{
birşeyler
}
else
{
birşeyler
}
Bu sayede milyonluk for döngülerinde farkedebileceğin hız artışı elde edersin.
Aslında bunu derleyiciler pipeline üzerinde low-level multithreading yaparak bir miktar çözüyorlar ama yine de kısıtlı, yani belki 4 ihtimal varsa, tamamını farklı corelar üzerinde deneyip(Senin birşey yapmana gerek kalmadan) bulabiliyorlar ama işlemci core sayısı ihtimal sayısından düşükse olmuyor veya herhangi bir durum multithreading low-level pipeline yapılmasını engelliyorsa(misal kod döngü içindeyse ve döngüler için zaten multithreading yapılıyorsa) yine olmuyor.
O yüzden bu tarz bir alışkanlık kazanabilirsin.

Böyle ince bilgileri üniversite hocalarından duymazsınız, Ben Kenobi reyizinizden duyarsınız. :D

Vay canına:D:D.Cidden harikasınız hocam.Ben Kenobi REYİZ ÇOK YAŞA:):)
 
Üst