多元化程序-该程序从用户那里获取输入,并打印出票数最多的候选人。我遇到两个问题,我希望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/