Else Komutu Hatası

Serpenos

Kilopat
Katılım
15 Ağustos 2014
Mesajlar
3.257
Makaleler
2
Çözümler
5
Daha fazla  
Cinsiyet
Erkek
Profil Kapağı
1522193036
Selam. Bir program yazmamız istendi. Vize, final, bütünleme sınavlarını alıp geçtiniz, kaldınız yazdırıyor ekrana. Ama şöyle bir sorun var ki program ortalama 60 altında iken doğru çalışmasına rağmen 60 üstünde ekrana geçtiniz yazısından sonra kaldınız yazısını da yazdırıyor. Yardım eder misiniz?

C++:
#include <stdio.h>
#include <conio.h>

int main() {
  
    int vize,final,ortalama1,ortalama2,butunleme;
  
    printf("Vize Notunuzu Giriniz: ");
    scanf("%d",&vize);
    printf("Final Notunuzu Giriniz: ");
    scanf("%d",&final);
  
    ortalama1=((vize*0.4) + (final*0.6));
  
    if (ortalama1>=60)
{
  
    printf ("Gectiniz.");
}
    else if(ortalama1<60)
    {
        printf("Butunleme Notunuzu giriniz: ");
        scanf("%d",&butunleme);
    }
  
    ortalama2=((vize*0.4) + (butunleme*0.6));
  
     if(ortalama2>=60){
      
        printf("Gectiniz.");
    }
  
    else {
        printf("Kaldiniz.");
    }
 
    getch();
  
    return 0;
  
  }
Demek istediğim:

Ekran Alıntıs2ı.PNG

Ekran Alıntısı.PNG
 
Son düzenleyen: Moderatör:
C++ dilini bilmiyorum, tam emin de değilim de sanırsam ikinci bloktaki else kısmını ilk bloktaki if için kuruyor.
C++:
else if(ortalama1<60)
    {
        printf("Butunleme Notunuzu giriniz: ");
        scanf("%d",&butunleme);
    }
Yerine,
C++:
else
    {
        printf("Butunleme Notunuzu giriniz: ");
        scanf("%d",&butunleme);
    }
Deneyebilir misiniz? Kaldı ki koşul 60'a eşit veya 60'tan büyük değilse, zaten 60'tan küçük demektir. Orada normal şartlarda da else if kullanmaya gerek yok.
 
Açıkçası ben çok iyi bilmem ama parantezlerde, parantez açmadan if eklemişsiniz gibi görünüyor. Bence bir olasılıkları alt parantezlere alın öyle deneyin. Ya da Environment.Exit(0) eklerseniz de olur diye düşünüyorum. Program ne yapacağını söylemediğiniz için sonraki noktaya atıyor direk herhalde. Program orada hata veriyor zaten.
 
Değişmedi hocam yine kaldınız yazdırıyor.
Açıkçası ben çok iyi bilmem ama parantezlerde, parantez açmadan if eklemişsiniz gibi görünüyor. Bence bir olasılıkları alt parantezlere alın öyle deneyin. Ya da Environment.Exit(0) eklerseniz de olur diye düşünüyorum. Program ne yapacağını söylemediğiniz için sonraki noktaya atıyor direk herhalde. Program orada hata veriyor zaten.
Hocam o dediğiniz kodu bilmiyorum basit kodlar kullanarak yazmam gerek. Ama if'ler için parantez açmamışsınız derken ne demek istediğinizi anlamadım. if(koşul){komut} olarak işliyor olması gerek.
 
Değişmedi hocam yine kaldınız yazdırıyor.

Hocam o dediğiniz kodu bilmiyorum basit kodlar kullanarak yazmam gerek. Ama if'ler için parantez açmamışsınız derken ne demek istediğinizi anlamadım. if(koşul){komut} olarak işliyor olması gerek.
Doğru, ama dediğim şey if için bir parantez açmışsın. Else if ile alakalı her şeyi de başka bir parantez altına alman gerekli. Eğer geçerse program sonlanmıyor ve arkadaki kodu çalıştırıyor. İkisini ayırın diyorum.
C# konsol uygulaması hakkında çok az bir bilgim var C++ başlamadım daha bende konsol uygulaması olarak yazabilirim istersen ama. Zaten ikisi de benzer şeyler ve ne yalan söyleyeyim yorgunum biraz.
 
1571345385378.png

Mantık sırasını bozduğunuz için hatalı çıkıyor. Hata almanızın sebebi tahminimce "else if" dedikten sonra sadece "if" kullanmanız. işaretlediğim yeri de "else if" olarak değiştirip deneyin.

Çünkü mantık sırasında "else if" kullanılmışsa sonrasında ya "else" ya da "else if" kullanılmalıdır. Son adım ise "else" ile bitmelidir.
 
Şöyle;

İkinci if bloğu else koşuluna dahil olacak. O yüzden geçti kaldı aynı anda yazıyor. Birinci bloktan çıkıp ikinciye giriyor. Ama ikinci koşul ortalama 60'dan aşağı ve bütünleme durumunu ilgilendiriyor.

C:
#include <stdio.h>
#include <conio.h>

int main() {

    int vize,finalNotu,ortalama1,ortalama2,butunleme;

    printf("Vize Notunuzu Giriniz: ");
    scanf("%d",&vize);
    printf("Final Notunuzu Giriniz: ");
    scanf("%d",&finalNotu);

    ortalama1=((vize*0.4) + (finalNotu*0.6));

    if (ortalama1>=60)
    {

    printf ("Gectiniz.");
    }

    else
    {
        printf("Butunleme Notunuzu giriniz: ");
        scanf("%d",&butunleme);

        ortalama2=((vize*0.4) + (butunleme*0.6));

        if (ortalama2>=60)
        {

            printf("Gectiniz.");
        }

        else
        {
            printf("Kaldiniz.");
        }

    }


    getch();

    return 0;

}

Screenshot_1.png

Dipnot: Köşeli parantezler de hatalı, bu derleyicinin yanlış görebileceği bir şey. İlk if bloğunu kapatan köşeli parantez yanlış yerde, main bloğunu sonlandırabilir.

Screenshot_2.png
 
Son düzenleme:
Eki Görüntüle 449275
Mantık sırasını bozduğunuz için hatalı çıkıyor. Hata almanızın sebebi tahminimce "else if" dedikten sonra sadece "if" kullanmanız. işaretlediğim yeri de "else if" olarak değiştirip deneyin.

Çünkü mantık sırasında "else if" kullanılmışsa sonrasında ya "else" ya da "else if" kullanılmalıdır. Son adım ise "else" ile bitmelidir.
Arkadaş orada else if altına başka bir if zinciri başlatmak istemiş. Orası eğer vize puanı yetmediğinden bütünlemeye girenler için.
Şöyle;

İkinci if bloğu else koşuluna dahil. O yüzden geçti kaldı aynı anda yazıyor.

C:
#include <stdio.h>
#include <conio.h>

int main() {

    int vize,finalNotu,ortalama1,ortalama2,butunleme;

    printf("Vize Notunuzu Giriniz: ");
    scanf("%d",&vize);
    printf("Final Notunuzu Giriniz: ");
    scanf("%d",&finalNotu);

    ortalama1=((vize*0.4) + (finalNotu*0.6));

    if (ortalama1>=60)
    {

    printf ("Gectiniz.");
    }

    else
    {
        printf("Butunleme Notunuzu giriniz: ");
        scanf("%d",&butunleme);

        ortalama2=((vize*0.4) + (butunleme*0.6));

        if (ortalama2>=60)
        {

            printf("Gectiniz.");
        }

        else
        {
            printf("Kaldiniz.");
        }

    }


    getch();

    return 0;

}

Eki Görüntüle 449276Eki Görüntüle 449276
Aynı bu arkadaşın dediği yazdığı gibi, yanlış kısma dahil etmişsin kodu.
 
Şöyle;

İkinci if bloğu else koşuluna dahil olacak. O yüzden geçti kaldı aynı anda yazıyor. Birinci bloktan çıkıp ikinciye giriyor. Ama ikinci koşul ortalama 60'dan aşağı ve bütünleme durumunu ilgilendiriyor.

C:
#include <stdio.h>
#include <conio.h>

int main() {

    int vize,finalNotu,ortalama1,ortalama2,butunleme;

    printf("Vize Notunuzu Giriniz: ");
    scanf("%d",&vize);
    printf("Final Notunuzu Giriniz: ");
    scanf("%d",&finalNotu);

    ortalama1=((vize*0.4) + (finalNotu*0.6));

    if (ortalama1>=60)
    {

    printf ("Gectiniz.");
    }

    else
    {
        printf("Butunleme Notunuzu giriniz: ");
        scanf("%d",&butunleme);

        ortalama2=((vize*0.4) + (butunleme*0.6));

        if (ortalama2>=60)
        {

            printf("Gectiniz.");
        }

        else
        {
            printf("Kaldiniz.");
        }

    }


    getch();

    return 0;

}

Eki Görüntüle 449276

Dipnot: Köşeli parantezler de hatalı, bu derleyicinin yanlış görebileceği bir şey. İlk if bloğunu kapatan köşeli parantez yanlış yerde, main bloğunu sonlandırabilir.

Eki Görüntüle 449278
Hocam siz biliyorsunuz sanırım bu dili bayağı. Bana ödev verir misiniz? Üniversite 1'e gidiyorum. Ve araştırıyorum da dili ama ne yapacağımı bilemiyorum. Şöyle 5-10 tane ödev verebilir misiniz bana? Bu tarzda döngü kuracağım ödevlerin de dahil olduğu.
 
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Yeni konular

Geri
Yukarı