无法在 typedef 实例中保存名称

问题描述 投票:0回答:1

我正在尝试用 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;

我收到“分配给数组类型的表达式”错误

c command-line-arguments typedef
1个回答
0
投票

int candidate_count;
中的
main()
遮蔽了全局
int candidate_count;
,因此
vote()
中的循环迭代 0 次。

删除

int candidate_count;
中的
main()

© www.soinside.com 2019 - 2024. All rights reserved.