C 为什么一个结构类型有一个int字段;“忘了吧”;第一次绕过for循环后的值是多少?

C 为什么一个结构类型有一个int字段;“忘了吧”;第一次绕过for循环后的值是多少?,c,for-loop,C,For Loop,为什么下面的代码只在for循环的第一次迭代中起作用 typedef struct { char name[3]; int gold, silver, bronze, total; } tally_t; int main(void) { tally_t country[COUNTRIES_COMPETING]; int j; j=0; country[j].gold=0; for (j=0; j<5; j++) { c

为什么下面的代码只在for循环的第一次迭代中起作用

typedef struct {
    char name[3];
    int gold, silver, bronze, total;
} tally_t;

int main(void)
{
    tally_t country[COUNTRIES_COMPETING];
    int j;
    j=0;
    country[j].gold=0;
    for (j=0; j<5; j++) {
        country[j].gold++;
    }
    return 0;
}
typedef结构{
字符名[3];
整数金、银、铜,总计;
}理货;
内部主(空)
{
统计国家[竞争国家];
int j;
j=0;
国家[j].黄金=0;

对于(j=0;j这是因为您只初始化了数组第一个元素的
gold
成员。其余所有元素都未初始化且具有未定义的值。更改未定义的值是未定义的行为。

您刚刚初始化了结构数组的第一个元素

为了解决您的问题,您可以这样做:

int main(无效)
{
统计国家[竞争国家];
int j;
//初始步骤
对于(j=0;j<5;j++)
国家[j]。黄金=0:

for(j=0;jOh我明白了。有没有办法初始化数组中的每个元素?一个不包含country[j]的for循环。gold=0…非常类似于您已有的循环;)
tally\t country[COUNTRIES\u COMPETING]={{0};
将数组中的所有元素初始化为0。Op没有首先通过代码进行调试。