0

I seem to have a working program but whenever i run Check50 it gives me all green except for two of the lines which for some reason don't seem to think it works.

#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) { int highest_vote = 0;

// find out what the highest number of votes is
for (int i = 0; i < candidate_count; i++)
{
    if (candidates[i].votes > highest_vote)
    {
        highest_vote = candidates[i].votes;
    }
    // Identify winner(s)
    for (i = 0; i < candidate_count; i++)
    {
        if (candidates[i].votes == highest_vote)
        {
            printf("%s\n", candidates[i].name);
        }
    }
return;
}

}

#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) { int highest_vote = 0;

// find out what the highest number of votes is
for (int i = 0; i < candidate_count; i++)
{
    if (candidates[i].votes > highest_vote)
    {
        highest_vote = candidates[i].votes;
    }
    // Identify winner(s)
    for (i = 0; i < candidate_count; i++)
    {
        if (candidates[i].votes == highest_vote)
        {
            printf("%s\n", candidates[i].name);
        }
    }
return;
}

}

#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) { int highest_vote = 0;

// find out what the highest number of votes is
for (int i = 0; i < candidate_count; i++)
{
    if (candidates[i].votes > highest_vote)
    {
        highest_vote = candidates[i].votes;
    }
    // Identify winner(s)
    for (i = 0; i < candidate_count; i++)
    {
        if (candidates[i].votes == highest_vote)
        {
            printf("%s\n", candidates[i].name);
        }
    }
return;
}

}

:( print_winner identifies Bob as winner of election print_winner function did not print winner of election :( print_winner identifies Charlie as winner of election print_winner function did not print winner of election

1 Answer 1

1

Try this election: 2 candidates (a,b) and 3 voters who vote a, b, b. Does it print b as the winner?

The problem is the second for loop in print_winner is nested within the outer (first) for loop. Program should execute the first loop to determine what is the highest_vote and then iterate through the candidates again (a second loop) to print all the candidates that have that number of votes.

You must log in to answer this question.

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