Last active
May 1, 2020 00:39
-
-
Save wx5162839/3026b24a23ca42922e7ed410a6d86386 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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) | |
| { | |
| // TODO | |
| 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) | |
| { | |
| // TODO | |
| // 1)Set an initial maxvotes value to 0 as a starting point to compare to | |
| // 2)Iterate over the list of candidates, updating the maxvotes value as you move through each element of the array | |
| // 3)Iterate over the list of candidates again printing those that have numbers of votes equal to the maxvotes values as you go | |
| int max = 0; | |
| int m = 0; | |
| string maxv; | |
| for (int i = 0; i < candidate_count; i++) | |
| { | |
| if (candidates[i].votes > max) | |
| { | |
| max = candidates[i].votes; | |
| maxv = candidates[i].name; | |
| printf("%s\n", maxv); | |
| } | |
| if ((candidates[i].votes == max) && ((strcmp(candidates[i].name, maxv) != 0))) | |
| { | |
| printf("%s\n", candidates[i].name); | |
| } | |
| } | |
| return; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment