0

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.

enter image description here

Here is a testing result.

enter image description here

Thank you very much for your help.

1 Answer 1

1

Program violates this instruction from the spec:

You should not modify anything else in plurality.c other than the implementations of the vote and print_winner functions (and the inclusion of additional header files, if you’d like).

2
  • Thank you for your comment. I managed it ;)
    – Pedarun
    Apr 9, 2020 at 0:49
  • This restriction is not obvious to me from the instructions. I have been browsing this stack exchange just to check on this fact. I was tempted to modify other parts of the program.
    – allopatry
    Jun 12, 2022 at 6:24

You must log in to answer this question.

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