我正在尝试用 c 创建一个投票项目,您可以在命令行中获取候选人姓名,然后获取选民人数和选票。函数 bool vote(char name[]) 计算得票数,而 void print_winner(void) 则打印获胜者。问题是我无法在 typedef 名称实例中保存候选人姓名,因为当输入选票时,它会不断打印“无效名称”,这意味着候选人姓名不存在。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
bool vote(char name[]);
void print_winner(void);
#define MAX 9
int candidate_count;
typedef struct
{
char *name;
int votes;
}
candidate;
candidate candidates[MAX];
int main(int argc, char *argv[])
{
int candidate_count;
int voter_count;
char cast[10];
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;
}
printf("Number of voters: ");
scanf("%i",&voter_count);
for (int i=0; i<voter_count; i++)
{
printf("Vote: ");
scanf("%s",cast);
if(!vote(cast))
{
printf("Invalid vote\n");
}
}
print_winner();
}
bool vote(char name[])
{
for (int j=0; j<candidate_count; j++)
{
if(strcmp(name,candidates[j].name)==0)
{
candidates[j].votes++;
return true;
}
}
return false;
}
// Print the winner (or winners) of the election
void print_winner(void)
{
int largest = candidates[0].votes;
for(int i=0; i<candidate_count; i++)
{
if(candidates[i].votes>largest)
{
largest=candidates[i].votes;
}
}
for(int i=0; i<candidate_count;i++)
{
if(largest==candidates[i].votes)
{
printf("winner is %s",candidates[i].name);
}
}
return;
}
运行:gccplurality.c -o out
./出约翰·查理·大卫
Output:
Number of voters: 3
Vote: David
Invalid vote
Vote: Charlie
Invalid vote
Vote: David
Invalid vote
当我将 typedef 的实例更改为
typedef struct
{
char name[10];
int votes;
}
candidate;
我收到“分配给数组类型的表达式”错误
int candidate_count;
中的 main()
遮蔽了全局 int candidate_count;
,因此 vote()
中的循环迭代 0 次。
删除
int candidate_count;
中的main()
。