多元化程序-该程序从用户那里获取输入,并打印出票数最多的候选人。我遇到两个问题,我希望print_winner在出现并列的情况下打印多个获胜者,并且在每个人都被并列时显示所有获胜者?您如何建议我这样做?

如果有多个获胜者的票数相同,您如何建议我这样做?在回答问题时,请保持简单,因为我是编程新手,但实际上并没有遇到困难的用语。

附言:我做了作业,这只是我要添加的一项附加功能。

谢谢

#include <cs50.h>

#include <stdio.h>

#include <string.h>

#include <stdbool.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
    bool exist = false;

    for (int i = 0; i < candidate_count; i++)
    {
        //check if the typed in name is in the list of candidates
        if (strcmp(name, candidates[i].name) == 0)
        {
            candidates[i].votes += 1;
            exist = true;
            break;
        }

    }

    return exist;
}

// Print the winner (or winners) of the election
void print_winner(void)
{
    int most = candidates[0].votes;
    string winner = candidates[0].name;
    for (int i = 1; i < candidate_count; i++)
    {
        if (most < candidates[i].votes)
        {
            most = candidates[i].votes;
            winner = candidates[i].name;
        }
    }

    //printf("%d", most);
    printf("%s\n", winner);
    return;
}

/* Print the winner (or winners) of the election
void print_winner(void) {
  int most = candidates[0].votes;
  string winner = candidates[0].name;
  for (int i = 1; i < candidate_count; i++) {
    if (most < candidates[i].votes) {
      most = candidates[i].votes;
    }

  }
  for (int j = 0; j < candidate_count; j++) {
    if (candidates[j].votes == most) {
      winner = candidates[j].name;
      printf("%s", winner);
    }
  }
}*/

最佳答案

根据the spec程序必须处理“多个获胜者”,这不是“附加功能”:


  如果多次选举可能会以平局结束
  每个候选人的票数最高。那样的话
  应输出每位获奖候选人的姓名,
  分隔线。


考虑一下print_winner您需要了解的内容。您需要知道什么是“最高”票,因为程序当前正在循环执行。此外,您需要知道谁获得了这么多的选票。这将需要通过“候选”的另一个循环,打印每个具有“最”的候选。

关于c - 多元化-如果票数相等,如何打印出多个获胜者?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59601352/

10-11 19:38