My problem is that I cannot make it correct in the check50 although the output from the simple testing seemingly fine. It would be grateful if anyone could help me understanding how to solve this. Thank you.
Here is my code.
#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;
// Number of voters
int voter_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;
}
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 n = 0; n < candidate_count; n ++)
{
if (strcmp(candidates[n].name, name) == 0)
{
candidates[n].votes ++;
return true;
}
}
return false;
}
// Print the winner (or winners) of the election
void print_winner(void)
{
// TODO
for (int n = voter_count; n > 0; n--)
{
int counter = 0;
for (int c = 0; c < candidate_count; c++)
{
if (candidates[c].votes == n)
{
printf("%s\n", candidates[c].name);
counter ++;
}
}
if (counter > 0)
{
return;
}
}
}
Below is check50 results.
Here is a testing result.
Thank you very much for your help.