Присвоение значений структурному массиву

#c

#c

Вопрос:

Я пытаюсь присвоить значения структурному массиву. Однако я получаю ошибку «Ожидаемое выражение». Есть ли что-то, чего мне не хватает? Я использую Xcode на случай, если это имеет значение.

 #include <stdio.h>
#include <stdlib.h>

struct MEASUREMENT
{
    float relativeHumidity;
    float temperature;
    char timestamp[20];
};

int main()
{
    struct MEASUREMENT measurements[5];
    
    measurements[0] = {0.85, 23.5, "23.07.2019 08:00"}; //Expected expression error
    measurements[1] = {0.71, 19.0, "04.08.2019 10:21"}; //Expected expression error
    measurements[2] = {0.43, 10.2, "07.08.2019 02.00"}; //Expected expression error
    measurements[3] = {0.51, 14.3, "20.08.2019 14:45"}; //Expected expression error
    measurements[4] = {0.62, 10.9, "01.09.2019 01:00"}; //Expected expression error
 

Спасибо!

Ответ №1:

Перечисление значений в фигурных скобках — это специальный синтаксис для инициализации в объявлениях. Список в фигурных скобках сам по себе не формирует выражение, которое можно использовать при присваивании.

Вы можете указать начальные значения в этой форме при определении массива:

 struct MEASUREMENT measurements[5] = {
        {0.85, 23.5, "23.07.2019 08:00"},
        {0.71, 19.0, "04.08.2019 10:21"},
        {0.43, 10.2, "07.08.2019 02.00"},
        {0.51, 14.3, "20.08.2019 14:45"},
        {0.62, 10.9, "01.09.2019 01:00"},
    };
 

В выражениях вы можете определить временный объект с помощью составного литерала, а затем присвоить его значение другому объекту. Составной литерал формируется с типом в круглых скобках, за которым следует заключенный в фигурные скобки список инициализаторов:

 measurements[0] = (struct MEASUREMENT) {0.85, 23.5, "23.07.2019 08:00"};
measurements[1] = (struct MEASUREMENT) {0.71, 19.0, "04.08.2019 10:21"};
measurements[2] = (struct MEASUREMENT) {0.43, 10.2, "07.08.2019 02.00"};
measurements[3] = (struct MEASUREMENT) {0.51, 14.3, "20.08.2019 14:45"};
measurements[4] = (struct MEASUREMENT) {0.62, 10.9, "01.09.2019 01:00"};