Итак, я пытаюсь перебрать динамический массив (обязательно) класса «Candidate», который имеет getter «getVotes ()» для того, чтобы получить голоса для сопоставления с «totalVotes ()» для возвратаобщее количество голосов и вернуть% от общего числа голосов, которые получает кандидат.
Однако, когда программа выполняется, она правильно выводит общее количество голосов, кандидатов и их голосов, но не вычисляет процент от общего числа голосов.
https://imgur.com/a/yJsBr5f
Также выдается исключение: «Завершается вызов после выброса экземпляра 'std :: logic_error' what (): basic_string :: _ M_construct, недопустимый
, и время от времени общее количество распечатанных голосов простономер мусора, который может быть программой, добавляющей адреса?
https://imgur.com/a/c4kyT11
Я попытался поставить cout, чтобы увидеть, добавляется ли число в функцию "totalVotes", но ничегораспечатывает.
Я знаю, что "getVotes ()" работает, потому что он все еще перечисляет правильное количество голосов.
class Candidate
{
int Votes;
//...
Candidate(string, int);
//...
int getVotes() {return Votes;}
void setVotes(int votes){Votes = votes;}
};
//return total votes
int totalVotes(Candidate *x)
{
int total = 0;
for(int i = 0; i < (int)sizeof(x); i++)
{
total = total + x[i].getVotes();
}
return total;
}
//main
int main(int argc, char **argv)
{
int noc;
int voteTotal;
cout << "Declare the number of candidates: ";
cin >> noc;
Candidate* candidates = new Candidate[noc+1];
//get list of candidates
for(int i = 0; i<noc; i++)
{
string name;
int votes;
cout << "Name for candidate " << i+1 << "?: ";
cin >> name;
cout << "How many votes did they get?: ";
cin >> votes;
candidates[i].setName(name);
candidates[i].setVotes(votes);
}
//get total votes from candidates
voteTotal = totalVotes(candidates);
cout << "Total Votes: " << voteTotal << endl;
cout << setw(20) << "Candidate" <<
setw(20) << "Votes Received" <<
setw(20) << "% of Total Votes" << '\n';
//return list of candidates (Why does this work and not "totalVotes()"?)
for(int i = 0; i<(int)sizeof(candidates)-1; i++)
{
cout << setw(20) << candidates[i].getName() <<
setw(20) << candidates[i].getVotes() <<
setw(20) << setprecision(2) << (candidates[i].getVotes()/voteTotal)*100 << "%\n";
}
return 0;
}
Таким образом, программа аварийно завершает работу сразу после того, как кандидатыв списке вместе с печатью пустой строки.
Я не уверен.