Çözüldü "İnteger overflow in expression [-Woverflow]" Uyarısı

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Durum
Mesaj gönderimine kapalı.

bastila

Hectopat
Katılım
28 Kasım 2019
Mesajlar
723
Makaleler
1
Çözümler
7
Dev C++'da C proje ödevimi yapıyorum. Konum birim çevirici yapmak ve bu uyarıyı payda yüksek olunca almaya başladım. Program çalışıyor, fakat payda 1000.000.000.000 gibi bir değer olunca ekrana negatif bir sayı yazıyor. İnternetten araştırdım, ama pek bir şey ile karşılaşamadım, anlayamadım. Long double denedim o da olmadı.
C:
else if(volume == 7){
       
         printf("Please enter Mm^3 : ");
         scanf("%f",&mm3);
       
         float mm3tokm3 = mm3/(1000*1000*1000*1000*1000*1000);
         float mm3tohm3 = mm3/(1000*1000*1000*1000*1000);
         float mm3todam3 = mm3/(1000*1000*1000*1000);
         float mm3tom3 = mm3/(1000*1000*1000);
         float mm3todm3 = mm3/(1000*1000);
         float mm3tocm3 = mm3/1000;
       
         printf("%.2f Mm^3 Convertions...\n",mm3);
         printf("%.10f Km^3\n%.9f Hm^3\n%.9f Dam^3\n%.8f M^3\n%.5f Dm^3\n%.2f Cm^3",mm3tokm3,mm3tohm3,mm3todam3,mm3tom3,mm3todm3,mm3tocm3);
       
     }
Mesela ilk 3 float değeri için alıyorum uyarıyı. Ekran görüntüleri ise şöyle :
"mm3" değerini 100 girdim, mm3 float tanımlı. Gerçi girsemde girmesemde fark etmiyor, program açılmadan yazıyor uyarılar.
-0.0000000673 Km^3 -0.000000065 Hm^3 -0.000000137 Dam^3 0.00000010 M^3 0.00010 Dm^3 0.10 Cm^3
Düzeltmenin bir yolunu bilen var mı ?
 
Çözüm
Sayılar integer'dır. Gidip çarparsan öyle olur.
Bu kadar büyük (daha doğrusu küçük) sayılarla uğraşıyorsan float kullanma.
Hassasiyeti de düzgün öğren.
Ya ilkindeki gibi yapacaksın ya da diğerlerinde olduğu gibi. C++'ta büyük sayıları yazarken bir karakterle ayırabiliyorsun ama hatırlayamadım. C'de o olay var mı orası da meçhul.
C++'ta kesme işaretiymiş. Hatta nereye koyduğunun bile önemi yok. İki rakam arasında olsun yeter.

Kod:
#include <stdio.h>

int main () {
    double mm3 = 0;

    printf("Please enter mm^3: ");
    scanf("%lf", &mm3);
    
    double mm3tokm3 = mm3 / ((long)1000*(long)1000*(long)1000*(long)1000*(long)1000*(long)1000);
    double mm3tohm3 = mm3 / 1000000000000000;
    double mm3todam3 = mm3 / 1000000000000;
    double mm3tom3 = mm3 / 1000000000;
    double mm3todm3 = mm3 / 1000000;
    double mm3tocm3 = mm3 / 1000;
    
    printf("%.2lf mm^3 Convertions...\n", mm3);
    printf("%.18lf km^3\n%.15lf mm^3\n%.12lf dam^3\n%.9lf m^3\n%.6lf dm^3\n%.3lf cm^3",
    mm3tokm3, mm3tohm3, mm3todam3, mm3tom3, mm3todm3, mm3tocm3);
    
    return 0;
}
Sayılar integer'dır. Gidip çarparsan öyle olur.
Bu kadar büyük (daha doğrusu küçük) sayılarla uğraşıyorsan float kullanma.
Hassasiyeti de düzgün öğren.
Ya ilkindeki gibi yapacaksın ya da diğerlerinde olduğu gibi. C++'ta büyük sayıları yazarken bir karakterle ayırabiliyorsun ama hatırlayamadım. C'de o olay var mı orası da meçhul.
C++'ta kesme işaretiymiş. Hatta nereye koyduğunun bile önemi yok. İki rakam arasında olsun yeter.

Kod:
#include <stdio.h>

int main () {
    double mm3 = 0;

    printf("Please enter mm^3: ");
    scanf("%lf", &mm3);
    
    double mm3tokm3 = mm3 / ((long)1000*(long)1000*(long)1000*(long)1000*(long)1000*(long)1000);
    double mm3tohm3 = mm3 / 1000000000000000;
    double mm3todam3 = mm3 / 1000000000000;
    double mm3tom3 = mm3 / 1000000000;
    double mm3todm3 = mm3 / 1000000;
    double mm3tocm3 = mm3 / 1000;
    
    printf("%.2lf mm^3 Convertions...\n", mm3);
    printf("%.18lf km^3\n%.15lf mm^3\n%.12lf dam^3\n%.9lf m^3\n%.6lf dm^3\n%.3lf cm^3",
    mm3tokm3, mm3tohm3, mm3todam3, mm3tom3, mm3todm3, mm3tocm3);
    
    return 0;
}
 
Son düzenleme:
Çözüm
Sayılar integer'dır. Gidip çarparsan öyle olur.
Bu kadar büyük (daha doğrusu küçük) sayılarla uğraşıyorsan float kullanma.
Hassasiyeti de düzgün öğren.
Ya ilkindeki gibi yapacaksın ya da diğerlerinde olduğu gibi. C++'ta büyük sayıları yazarken bir karakterle ayırabiliyorsun ama hatırlayamadım. C'de o olay var mı orası da meçhul.
C++'ta kesme işaretiymiş. Hatta nereye koyduğunun bile önemi yok. İki rakam arasında olsun yeter.

Kod:
#include <stdio.h>

int main () {
    double mm3 = 0;

    printf("Please enter mm^3: ");
    scanf("%lf", &mm3);
   
    double mm3tokm3 = mm3 / ((long)1000*(long)1000*(long)1000*(long)1000*(long)1000*(long)1000);
    double mm3tohm3 = mm3 / 1000000000000000;
    double mm3todam3 = mm3 / 1000000000000;
    double mm3tom3 = mm3 / 1000000000;
    double mm3todm3 = mm3 / 1000000;
    double mm3tocm3 = mm3 / 1000;
   
    printf("%.2lf mm^3 Convertions...\n", mm3);
    printf("%.18lf km^3\n%.15lf mm^3\n%.12lf dam^3\n%.9lf m^3\n%.6lf dm^3\n%.3lf cm^3",
    mm3tokm3, mm3tohm3, mm3todam3, mm3tom3, mm3todm3, mm3tocm3);
   
    return 0;
}
Dediğinizi çok iyi anladım, dikkatimden kaçmış gerçekten. Çok teşekkür ederim, konu kilitlenebilir.
 
Durum
Mesaj gönderimine kapalı.

Technopat Haberler

Geri
Yukarı