Hesap makinesinde hata

EmirArat

Hectopat
Katılım
20 Kasım 2018
Mesajlar
113
Çözümler
1
C'de switch case ile basit hesap makinesi yapmaya çalıştım ama çıktı olarak sonucu değil 1. sayıyı alıyorum. Nerde hatam var?

Kod:
#include <stdio.h>

#include <stdlib.h>







int main() {

  

    int sayi1,sayi2,sonuc;

  

    char islem;

  

    printf("1. Sayiyi girin:");

    scanf("%d",&sayi1);

  

    printf("2. Sayiyi girin:");

    scanf("%d",&sayi2);

  

    printf("t-->Toplama\nf-->Cikarma\nc-->Carpma\nb-->Bolme\n\nIslem secin:");

    scanf("%s",&islem);

  

    switch(islem)

    {

        case 't':

        sonuc=sayi1+sayi2;

        printf("%d",sonuc);

        break;

      

        case 'f':

        sonuc=sayi1-sayi2;

        printf("%d",sonuc);

        break;

      

        case 'c':

        sonuc=sayi1*sayi2;

        printf("%d",sonuc);

        break;

      

        case 'b':

        sonuc=sayi1/sayi2;

        printf("%d",sonuc);

        break;

      

        default: printf("Hatali giris");

      

      

          

    }

  

  

  

  

    return 0;

}
 
Son düzenleyen: Moderatör:
C:
scanf("%s",&islem);
Bu yanlış bir kullanım. Doğrusu alttaki gibi olacak. "%s" dizileri okumak için. "islem" değişkeninde sadece 1 karakterlik boş yer var. "%s" ile bir veya daha fazla karakter içeren diziler okunmaya çalışıldığında etrafındaki verileri bozabilir.
C:
scanf(" %c",&islem);
 
Son düzenleme:
"%s" dizileri okumak için. "islem" değişkeninde sadece 1 karakterlik boş yer var. "%s" ile bir veya daha fazla karakter içeren diziler okunmaya çalışıldığında etrafındaki verileri bozabilir.
Char için %s veya %c kullanılır diye öğrenmiştim. Farklarını bilmiyordum. Kısaca ne gibi durumlarda %s ne gibi durumlarda %c kullanmalıyım, açıklayabilir misiniz?

Bir de o boşluk bırakma olayı olmadan çalışmadı gerçekten ama sebebini anlamadım. Bu neden gerekli?
 
Char için %s veya %c kullanılır diye öğrenmiştim. Farklarını bilmiyordum. Kısaca ne gibi durumlarda %s ne gibi durumlarda %c kullanmalıyım, açıklayabilir misiniz?
Bir diziyi scanf ile tarayacaksak "%s", tek bir karakter tarayacaksak "%c" kullanılmalı. Aşağıda birkaç örnek bıraktım.

Karakterlerden (char) oluşan bir diziyi (String) bir değişkene kopyalanacaksa:
C:
int main() {
    char dizi[20]; //İçerisinde karakter tutan bir dizi oluşturduk.
    printf("Bir kelime giriniz: ");
    scanf("%s", dizi); //Yazacağımız kelime burada dizi adlı değişkene atanır.

    printf("Girilen kelime: %s", dizi);
    return 0;
}

Tek elemanlı bir karakter (char) tutacaksak:
C:
int main() {
    char chr; //İçerisinde karakter tutan bir dizi oluşturduk.
    printf("Bir harf giriniz: ");
    scanf("%c", &chr);

    printf("Girilen harf: %c", chr);
    return 0;
}

"%c" önüne boşluk koymamızın sebebi char olarak "enter" tuşunu kaydetmesi. Sayı girdikten sonra "enter" tuşuna basıyoruz. "%c" hemen hop karakter girildi diyip "enter" tuşunu "islem" değişkenine atıyor. Bunu engellemek için "%c"'nin önüne boşluk bırakıyoruz.
 
Son düzenleme:

Yeni konular

Geri
Yukarı