无法访问结构数组中的值

时间:2014-11-16 16:29:39

标签: c

我遇到了这段代码的问题。特别是我似乎无法弄清楚为什么voteFractions()函数对我不起作用。它被恰当地调用,并且所有正确的参数似乎都达到了函数,但是我无法从"候选人[i] .votes_fraction = candidate [i] .votes / total;"获得任何东西。我得到的所有候选人[i] .votes_fraction是0.00。

我尝试使用NUMBER_OF_CANDIDATES = 1来运行该程序,在这种情况下一切运行正常,所以我觉得我可能会做些傻事,但我似乎无法看到它... < / p>

#define NUMBER_OF_CANDIDATES 10

typedef struct candidate{

    char name[20];
    int votes;
    float votes_fraction;

} candidate;


int totalVotes(candidate *candidates)
{
    int total = 0;
    for (int i = 0; i<NUMBER_OF_CANDIDATES; i++)
        total += candidates[i].votes;

    return total;
}


void voteFractions(candidate *candidates, int total, char *winner)
{
    float most_votes = 0, test;

    for (int i = 0; i<NUMBER_OF_CANDIDATES; i++)
    {
        candidates[i].votes_fraction = candidates[i].votes/total;

        if (candidates[i].votes_fraction > most_votes)
        {
            most_votes = candidates[i].votes_fraction;
            strcpy(winner, candidates[i].name);
        }
    }
}


int main()
{

    candidate candidates[NUMBER_OF_CANDIDATES];
    int total;
    char winner[20];

    for (int i = 0; i<NUMBER_OF_CANDIDATES; i++)
    {
        printf("Enter candidate's name and the number of votes received: ");
        scanf("%s %d", candidates[i].name, &candidates[i].votes);
    }

    total = totalVotes(candidates);
    voteFractions(candidates, total, winner);

    return 0;
}

1 个答案:

答案 0 :(得分:2)

问题在于本声明

candidates[i].votes_fraction = candidates[i].votes/total;

表达

candidates[i].votes/total

使用整数运算,因为两个操作数的类型都是int。由于总数总是大于或等于候选人[i] .votes,因此除法的结果等于0.你必须写

( float )candidates[i].votes/total

考虑变量test已声明但未在函数voteFractions中使用。你可以删除它。

void voteFractions(candidate *candidates, int total, char *winner)
{
    float most_votes = 0, test;
    //...