2011-10-19 81 views
0

我不明白爲什麼我的部門的結果出現向下舍入?爲什麼我的分部結果顯示爲關閉?

#include <iostream> 
#include <stdio.h> 
using namespace std; 

int rVote, oVote, dVote; 
int rTotal, oTotal, dTotal, total; 
int rPercent, dPercent, oPercent; 

bool loop(char vote){ 
     switch(toupper(vote)){ 
       case 'D': 
        dVote = 1; 
        dTotal = dTotal + dVote; 
        return true; 
       case 'R': 
        rVote = 1; 
        rTotal = rTotal + rVote; 
        return true; 
       case 'O': 
        oVote = 1; 
        oTotal = oTotal + oVote; 
        return true; 
       case 'Q': 
        return false; 
     } 
     return true; 
} 
int main(){ 
     char vote; 
     do{ 
       printf("Enter Vote [D/R/O] or Q to quit: "); 
       scanf("%c%*c", &vote); 
     } while (loop(vote)); 
     total = dTotal + rTotal + oTotal; 
     rPercent = ((rTotal/total)*100); 
     dPercent = ((dTotal/total)*100); 
     oPercent = ((oTotal/total)*100); 
     printf("Democrate total vote %d: %d%%\n", dTotal, dPercent); 

     printf("Republican total vote %d: %d%%\n", rTotal, rPercent); 

     printf("Other total vote %d: %d%%\n", oTotal, oPercent); 
} 

大,我是非常愚蠢的.... 爲什麼說任何不打印在這個C/C++程序的百分比值我*Percent的嗎?

謝謝。

+2

這是做到這一點:也許因爲它四捨五入爲最接近%這樣的事情可能更合適一個不是C/C++程序。這是一個唯一的C++程序,因爲它不會編譯爲C.但是,它被編寫爲一個C程序。你應該選擇其中的一個並且學習它,而不是學習兩者之間的某種混合。儘管出現,他們是非常不同的語言。如果你決定使用C++,我會推薦[一本好的C++入門書](http://stackoverflow.com/q/388242/46642)。 –

+0

我想成爲一名C程序員,首先選擇C語言,但在C++編程類atm中。老師似乎並不介意。所以主要是爲什麼我說我所有的代碼都是用c格式寫的。 –

回答

4

這是因爲你在做整數除法。 C/C++中的整數劃分向下舍入。所以,你的下面的代碼:

rPercent = ((rTotal/total)*100); 
    dPercent = ((dTotal/total)*100); 
    oPercent = ((oTotal/total)*100); 

都是四捨五入至0

爲了解決這個問題,你應該轉換爲浮點類型:

rPercent = (int)((double)rTotal/total*100); 
    dPercent = (int)((double)dTotal/total*100); 
    oPercent = (int)((double)oTotal/total*100); 

編輯:

由於四捨五入行爲,上面的代碼可能會給出一些奇怪的結果。

rPercent = (int)((double)rTotal/total*100 + 0.5); 
    dPercent = (int)((double)dTotal/total*100 + 0.5); 
    oPercent = (int)((double)oTotal/total*100 + 0.5); 
+0

有趣。謝謝。我不知道你可以這樣寫。等10分鐘等待結束後,我會回答這個問題。很高興我問了這個問題,我更喜歡這個修復,然後我記得前一陣子我做了些什麼。 –

+0

轉化爲double雖然是矯枉過正....如果你只是乘以100,那麼你不必前後來回投擲 –

+0

這裏不是嚴格需要使用浮點數學,你只是想減少價值(除)在計算結束而不是開始。 –

1

,因爲你是第一次歸零他們:)

每個百分比

dPercent = ((dTotal*100)/total); 
相關問題