Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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(name, candidates[i].name) == 0) //this compares the strings to make sure the right names are found
- {
- candidates[i].votes++; //this adds a vote
- return true;
- }
- }
- return false;
- }
- // Print the winner (or winners) of the election
- void print_winner(void)
- {
- //One loop to find max votes
- int i = 0, max = candidates[0].votes;
- for (i = 0; i < candidates[i].votes; i++)
- {
- max = 0;
- if (candidates[i].votes > max)
- {
- max = candidates[i].votes;
- }
- }
- //Second loop to find candidate with the max votes found in above loop
- for (i = 0; i < strlen(name); i++)
- {
- if (max >= candidates[i].votes)
- {
- printf("%s\n", candidates[i].name);
- }
- }
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement