2016-10-05 2 views
0

У меня есть мой код здесь, и он работает, однако, когда я пытаюсь вывести процент, который он просто выводит 0, я долгое время пытался выяснить, чего я пропущу, Я невежественна. В основном я пытаюсь вывести процент голосов за каждого кандидата из общего количества голосов. Любая помощь будет оценена по достоинству. Вот мой вывод; Output display Кроме того, им известно, что победитель проходит через каждого пользователя до тех пор, пока по какой-то причине не достигнет конца, все еще пытаясь выработать изломы.Не выводя вычисления, просто 0

Вот мой код -

#include <iostream> 
#include <string> 
#include <iomanip> 


using namespace std; 

class candidatesElection 
{ 
public: 

    string last; 
    float votePercent; 
    void winnerOfElection(); 
    void outputDis(); 
    int total = 0; 
}; 

int main() 
{ 

    string lastName[5]; 
    int amountOfVotes[5]; 
    double percentTotal[5]; 
    int total = 0; 
    int winnerNo = 0; 
    int winningCandidate; 
    string winningName; 


    for (int i = 0; i < 5; i++) 
    { 
     cout << "Enter the last name of the Candidate: " << endl; 
     cin >> lastName[i]; 
     cout << endl; 

     cout << "Enter the votes received by the Candidate: " << endl; 
     cin >> amountOfVotes[i]; 


     total += amountOfVotes[i]; 
     cout << "Total number of votes is: " << total << endl; 
    } 


    for (int i = 0; i < 5; i++) 
    { 
     if (amountOfVotes[i] > amountOfVotes[winnerNo]) winnerNo = i; 
     amountOfVotes[i] = amountOfVotes[winnerNo]; 
    } 


    for (int i = 0; i < 5; i++) 
    { 
     percentTotal[i] = (amountOfVotes[i]/total) * 100.0; // need to make it floating point 
    } 

    void outputDis(); 
    { 
     cout << endl << left << setw(25) << "Candidate" << right << setw(25) << "Votes Received" << setw(25) << "% of Total Votes" << endl; 


     for (int i = 0; i < 5; i++) 
      cout << endl << left << setw(25) << lastName[i] << right << setw(25) << amountOfVotes[i] << setw(25) << percentTotal[i] << endl; 
     cout << endl << left << setw(25) << "Total" << right << setw(25) << total << endl; 


     for (int i = 1; i < 5; i++) 
     { 

      int winHigh = amountOfVotes[0]; 
      string win = lastName[0]; 
      if (amountOfVotes[i] > winHigh) 
      { 
       winHigh = amountOfVotes[i]; 
       win = lastName[i]; 
      } 
      cout << "The Winner of the Election is " << win << endl; 

     } 
    } 

     system("pause"); 



}; 

ответ

5

amountOfVotes[i]/total Коэффициент в (amountOfVotes[i]/total) * 100.0 является evalated в целочисленной арифметики: т.е. любой фракции отбрасывают.

Таким образом, вы получаете 0 * 100 для всех случаев, где amountOfVotes[i] составляет менее total.

Решение переставить формулу 100 * amountOfVotes[i]/total;, или, еще лучше 100.0 * amountOfVotes[i]/total;, который заставит оценку в двойной точности с плавающей точкой - вы в опасности переполнения в int, который на некоторых системах может иметь верхний предел, как низкий как 32767.

Это не сразу видно даже при использовании линейного отладчика. Но используйте этот отладчик, чтобы выработать другие «перегибы».

+0

Спасибо, что имеет смысл! Однако, когда я менял его, по какой-то причине он выводит некоторые из значений как одно и то же. то есть. Я вошел в баллы 34, 56, 78, 96, 45 и вывел 34, 56, 78, 96, 96? –

+1

Это, я думаю, связано с тем, что вы переназначаете 'int winHigh = amountOfVotes [0];' в * body * финального цикла 'for'. Обратите внимание, что ваш выход монотонно возрастает, и отклонение происходит, когда вы вводите оценку счета. – Bathsheba

+0

Игнорировать меня Я только что понял, что мой код выводит «кандидатский счет» неправильно! По какой-то причине это несколько раз повторяется? Ваше решение работало на процент, спасибо! –

Смежные вопросы