Как добавить пользовательскую структуру в массив в C?

#arrays #c #struct

Вопрос:

У меня есть пользовательская структура под названием pair, которая имеет два аргумента: int победитель и int проигравший

 typedef struct
{
    int winner;
    int loser;
}
pair;
 

У меня также есть массив пар, называемых парами, но когда я пытаюсь добавить пару в массив, он говорит,

 tideman.c:157:37: error: expected expression
                pairs[pair_count] = {i, j};
 

Есть ли проблема с использованием обозначений в фигурных скобках для добавления структур в массивы в C? Если я создам переменную для добавления пар, будет ли она изменять все пары в массиве каждый раз, когда я добавляю новую пару (из-за проблем с изменчивостью)?

     for (int i = 0; i < candidate_count; i  )
    {
        for (int j = 0; j < candidate_count; i  )
        {
            if (preferences[i][j] > preferences[j][i])
            {
                pairs[pair_count] = {i, j};
            }
        }
    }
 

Ответ №1:

{i, j} будет работать только при инициализации ( pair x = {i, j}; ). pairs[pair_count] = {i, j}; было бы назначение, и там вам нужна переменная типа pair в правой части. Самый простой способ получить его-использовать составной литерал pairs[pair_count] = (pair){i, j}; . Кроме того, вы можете назначить каждому участнику отдельно ( pairs[pair_count].winner=i; pair[pair_count].loser=j; ).