Şimdi Ara

C kodu çözülemeyen hata

Bu Konudaki Kullanıcılar:
2 Misafir - 2 Masaüstü
5 sn
13
Cevap
0
Favori
258
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkadaşlar merhaba.C ye yeni başladım ve aşağıdaki kodda girilen sayının kaç basamaklı ve basamaklarındaki rakamların toplamını hesaplayan programı yazdım ancak basamak toplamında ekrana 0 yazılıyor.(sumdigit fonksiyonu).Deneyimli arkadaşlardan yardım bekliyorum.Teşekkürler.

    int ndigit(int val) {
    if (val == 0)
    return 0;
    int digit_count = 1;
    while ((val = getchar() != '
    ')) {
    digit_count++;
    val /= 10;
    }
    return digit_count;

    }


    int sumdigit(int number) {
    int result = 0;
    while ((number = getchar()) != '
    '){
    result += number - '0';


    }

    return result;


    }


    int main()
    {
    int a;

    printf("Bir tam sayi giriniz:
    ");

    a = getchar();

    printf("Bu sayinin basamak sayisi =%d", ndigit(a));
    printf("Bu sayinin basamak degeri toplami= %d", sumdigit(a));
    }



    < Bu mesaj bu kişi tarafından değiştirildi onboardx -- 16 Mayıs 2020; 22:2:19 >



  • Kod size mi ait yoksa başka yerde görüp kendiniz mi denediniz? Algoritması çok ilginç geldi. Deneyimli değilim ama bu tür işlemlerde aritmetik işlem kullanılır genelde. Misal, result += number - '0'; kısmını anlayamadım.


    Ben olsam şöyle yapardım:

    #include <stdio.h>

    int main(void) {
    int number;
    int total = 0, digits = 0;
    printf("Enter a number: ");
    scanf("%d", &number);

    while(number>0) {
    digits++;
    total += number%10;
    number /= 10;
    }

    printf("SUM OF DIGITS: %d", total);
    printf("NUMBER OF DIGITS: %d", digits);
    }



    < Bu mesaj bu kişi tarafından değiştirildi Guest-06D4C1909 -- 16 Mayıs 2020; 23:9:26 >
  • C'de ASCII karakterler byte olarak tutulduğu için result += number - '0' 'deki '0' byte tipinde ve degeri de 48 :)

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Teşekkürler cevap için. Aslında o zaman her döngüde 48 çıkartıyoruz. Peki bunun sebebi nedir?



    < Bu mesaj bu kişi tarafından değiştirildi Guest-06D4C1909 -- 17 Mayıs 2020; 6:7:6 >
  • ‘9’ character i ascii de 48+9 yani 57 ye esit


    Rakamlar için Char to int yapmak için kullanılıyor

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Evet dönüşüm için kullanılıyor.Sadece kodda dediğim gibi basamak sayısı doğru çalışıyor ama 2348 2+3+4+8 İşleminde hep sıfır sonucunu alıyorum.
  • quote:

    Orijinalden alıntı: Guest-06D4C1909

    Kod size mi ait yoksa başka yerde görüp kendiniz mi denediniz? Algoritması çok ilginç geldi. Deneyimli değilim ama bu tür işlemlerde aritmetik işlem kullanılır genelde. Misal, result += number - '0'; kısmını anlayamadım.


    Ben olsam şöyle yapardım:

    #include <stdio.h>

    int main(void) {
    int number;
    int total = 0, digits = 0;
    printf("Enter a number: ");
    scanf("%d", &number);

    while(number>0) {
    digits++;
    total += number%10;
    number /= 10;
    }

    printf("SUM OF DIGITS: %d", total);
    printf("NUMBER OF DIGITS: %d", digits);
    }
    Formatlı girişi kullanırsam mesela 30 basamaklı sayı giremem unsigned long long tuttuğu değeri aşabilirim de.
  • onboardx O kullanıcısına yanıt
    Şöyle olur mu?


    #include <stdio.h>

    int main(void) {
    char number;
    int counter = 0, total = 0;

    printf("Enter a very long number: ");

    while((number = getchar()) != '/n' ) {
    total += number - '0';
    counter++;
    }

    printf("SUM OF DIGITS: %d", total);
    printf("NUMBER OF DIGITS: %d", counter);

    }



    yerine bilerek /n yazdım çünkü code paneli algılayıp break yapıyor.



    < Bu mesaj bu kişi tarafından değiştirildi Guest-06D4C1909 -- 17 Mayıs 2020; 9:45:9 >
  • gerchar da satır sonu için \n gerekli /n ile doğru çalışmaz

    < Bu ileti mini sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: Guest-06D4C1909

    Şöyle olur mu?


    #include <stdio.h>

    int main(void) {
    char number;
    int counter = 0, total = 0;

    printf("Enter a very long number: ");

    while((number = getchar()) != '/n' ) {
    total += number - '0';
    counter++;
    }

    printf("SUM OF DIGITS: %d", total);
    printf("NUMBER OF DIGITS: %d", counter);

    }



    yerine bilerek /n yazdım çünkü code paneli algılayıp break yapıyor.
    Bu şekilde oluyor hocam ben iki ayrı fonksiyon halinde tanımlayıp main içinde çağırmayı istiyorum aslında.Getchar ile tek main altında yapılabiliyor ama iki ayrı fonskiyonda new line istiyor ve enter a bastığınızda bufferda karakter kalmıyor dolayısıyla ikinci fonskiyon hep 0 gösteriyor.
  • Evet ya bilerek yaptım çünkü diğer türlü burada break yapıp kodun düzeni bozuluyor. Bug sanırım.
  • onboardx O kullanıcısına yanıt
    Öyle nasıl yapılır bilemedim. Kolay gelsin.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.