commit fe54051fa40359915cf7e0bd253ac14d2a837f6a Author: kukemuna Date: Mon Feb 26 22:11:42 2024 +0200 automated commit by check50 [check50=True] diff --git a/plurality.c b/plurality.c new file mode 100644 index 0000000..b607267 --- /dev/null +++ b/plurality.c @@ -0,0 +1,103 @@ +#include +#include +#include + +// 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) +{ + int max_votes = 0; + + // Find max votes + for (int i = 0; i < candidate_count; i++) + { + if (candidates[i].votes > max_votes) + { + max_votes = candidates[i].votes; + } + } + + // Find candidate(s) with max votes + for (int i = 0; i < candidate_count; i++) + { + if (candidates[i].votes == max_votes) + { + printf("%s\n", candidates[i].name); + } + } + + return; +}