2016-10-23 37 views
16

Kullanıcı tarafından girilen miktara göre komisyon belirleyen bir işlev yapmaya çalışıyorum. Bir kullanıcı iki kez girer ve hangi denklemin kullanıldığını belirlemek için kullanır. Ama yazdığım kod her zaman başka bir ifadeye gider ve koşulların neyin yanlış olduğundan emin değilim.Eğer/else her zaman başka bir ifadeye giderse

double calculate(double s) 
{ 
    double c; 
    if (s > 300,000) 
    { 
     c = 25,000 + (0.15 * (s-300,000)); 
     cout << "went to if" << endl; 
     return c; 

    } 

    else if (300,000 > s && s > 100,000) 
    { 
     c = 5,000 + (0.10 * (s-100,000)); 
     cout << "went to else if" << endl; 
     return c; 

    } 

    else 
    { 
     c = 0.05 * s; 
     cout << "went to else" << endl; 
     return c; 

    } 
} 
+0

@krzaq Nasıl? Ciddi anlamda? –

+3

@ πάνταῥεῖ, her ikisi de işlevin kötüye kullanımı ile ilgilidir. – krzaq

+0

@krzaq Belki, ama bir dupe için açıkça yeterli değil. Hadi. –

cevap

25

s > 300,000(s > 300),000 eşdeğer bir virgül ifade vardır. Virgül ifadesinin değeri, listedeki sonun değeridir, burada 000. Hangi, bool'a dönüştürüldüğünde false olarak değerlendirilir.

Sen yazabilirsiniz

olarak
if(s > 300'000) 

ya, derleyici sadece

if(s > 300000) 

olarak, bu yeni model notasyonu desteklemez Yoksa

double const k = 1000; 

tanımlayabilirsiniz ancak ve

yazınız.

Ve benzer şekilde 25 000, 100 000 ve 5000 literal için.

+0

Bu işe yaradı, teşekkürler! Bunu test ettiğimde kontrol etmeliydim. Programı ilk kez çalıştırdım, miktarını virgülle girdim ve yanlış bir miktar aldım. Bunu fark etmeliydim o zaman! – gingikid

+1

Ayrıca, belirtilen tamsayıyı 1000 ile çarpmak için kullanıcı tanımlı bir sözcük olarak "lite" harfini "k" olarak bildirebilirsiniz. –

+0

@StackDanny: Evet, teşekkürler, iyi fikir, ama yukarıda baktığımda en kolay anladım. kaynak kodu (yazmanın tersine). Olabilir. Emin değil. –

18

if (s > 300,000) 

bir numara 300,000 olarak düşünülmüştü nedir, aslında, false tüm

if ((s > 300),(000)) 

ve sonuçları gibi çözümlenir ,-operator tuhaf bir kullanım, içinde zaman. Bunun yerine, (else if (300,000 > s && s > 100,000) için ve diğer yerlerde bir çift Ditto.)

if (s > 300000) 

deneyin

4

300,000 değişmez uygun double değil, virgül operatörünü uygular ve değer 0 ile biter.

kullanın çift değişmezleri için .: binlerce 300.000 veya hiç ayırıcı: 300000

+2

Bin ayırıcının anlamı, '' değil. – AlexD

+0

@AlexD Bundan bahsetmiştim? –

+0

Sanırım sonuna kadar okumalıyım! – AlexD