Ваша проблема здесь:
bool vote(string name)
{
// TODO
// LOOK OUT HERE FOR THE MISTAKE
for (int i = 0; i < candidate_count; i++)
{
if (strcmp(candidates[i].name, name) == 0)
{
candidates[i].votes++ ;
return true;
}
return false; // <<<<<<<<<<<<<<<<<< ERROR!
}
}
Если вы не нашли соответствия во время первой итерации, вы возвращаетесь из функции, и bob
никогда не получает изменения для подсчета некоторых голосов. Вам нужно переместить второй return
после l oop.
bool vote(string name)
{
for (int i = 0; i < candidate_count; i++)
{
if (strcmp(candidates[i].name, name) == 0)
{
candidates[i].votes++;
return true;
}
}
return false;
}
И еще одна проблема:
for (int i = 1; i <= candidate_count; i++)
{
if (candidates[i].votes > highest_vote)
{
candidates[i].votes = highest_vote;
}
}
Прежде всего: индекс должен начинаться с 0, как упоминалось в моем комментарии. Второе: вы должны обновить highest_vote
, а не наоборот.
for (int i = 0; i < candidate_count; i++)
{
if (candidates[i].votes > highest_vote)
{
highest_vote = candidates[i].votes;
}
}