0

#include <cs50.h> #include <stdio.h> #include <string.h>

// Max number of candidates #define MAX 9

// Candidates have name and vote count typedef struct { string name; int votes; } candidate;

// Array of candidates candidate candidates[MAX];

// Number of candidates int candidate_count;

// Function prototypes bool vote(string name); void print_winner(void);

int main(int argc, string argv[]) { // Check for invalid usage if (argc < 2) { printf("Usage: plurality [candidate ...]\n"); return 1; }

// Populate array of candidates
candidate_count = argc - 1;

if (candidate_count > MAX)
{
    printf("Maximum number of candidates is %i\n", MAX);
    return 2;
}

for (int i = 0; i < candidate_count; i++)
{
    candidates[i].name = argv[i + 1];
    candidates[i].votes = 0;
}

int voter_count = get_int("Number of voters: ");

// Loop over all voters
for (int i = 0; i < voter_count; i++)
{
    string name = get_string("Vote: ");

    // Check for invalid vote
    if (!vote(name))
    {
        printf("Invalid vote.\n");
    }
}

// Display winner of election
print_winner();

}

// Update vote totals given a new vote 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; }

// Print the winner (or winners) of the election void print_winner(void) { for (int i = 0; i < candidate_count; ++i) { int position = i; for (int j = 0; j < candidate_count; ++j) { if (candidates[j].votes > candidates[i].votes) { position = j; } }

    if (position != i)
    {
        int swap = candidates[i].votes;
        candidates[i].votes = candidates[position].votes;
        candidates[position].votes = swap;
    }
}

printf("%s\n", candidates[0].name);

for (int counter = 1; counter < candidate_count; ++counter)
{
    if (candidates[counter].votes == candidates[0].votes)
    {
        printf("%s\n", candidates[counter].name);
    }
}

}

check50 is returning the errors: :( print_winner identifies Bob as winner of election Cause print_winner function did not print winner of election :( print_winner identifies Charlie as winner of election Cause print_winner function did not print winner of election :( print_winner prints multiple winners in case of tie Cause print_winner function did not print both winners of election

I"ve tested my code multiple times and its working perfectly so I don't know wahts goin on here, any suggestions?

1 Answer 1

1

Try an election of 3 candidates a,b,c and 4 voters who cast the ballots: a, b, c, c. It is obvious that c has the most votes. print_winner will give a different, incorrect result. At a quick read, it doesn't swap name. There may be other flaws in the logic, but that jumps off the page.

This solution is much more complicated than it needs to be. print_winner needs to know how many votes is "the most", and who has that number of votes. It can be accomplished easily with 2 separate loops instead of nested loops.

1
  • Yeah, I think the error was that only votes were swapped, I ended up going with a much simpler function though. Thanks for your help! Feb 18, 2022 at 18:20

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .