Переход между структурами

Senovik
Offline
Зарегистрирован: 06.10.2018

Добрый день!

Есть у меня задача хранить схожие данные о нескольких условных "объектах", и выводить на экран. По кнопкам право/лево, соответсвенно, переходить к предыдущему/следующему объекту.

Сначала всё делал через двумерные массивы. Например

//Это не копипаст кода, а пример
int object = 10; //Кол-во объектов
char text[object][20] = {}; //Названия
char time[object][5] = {}; //какое-то время
// и тд

void loop{
int select = 0;
if (left) select--; //кнопка лево
if (right) select++; //кнопка право
Serial.print(text[select]); //Напечатать название
Serial.print(time[select]); //Напечатать время
}

Но в какой-то момент таких характеристик стало много, да и появилась потребность "выключать" некоторые объекты - то есть хранить флаг, и если он снят на 2-ом объекте, то после 1-го переходить сразу к 3-ему и тд.

Появилась идея использовать typedef struct, например

typedef struct {
   char text[20]; //Названия
   char time[5]; //какое-то время
// и тд
   boolean flag; 
}Strobject;
Strobject object1 = {...}; //1-й объект
Strobject object2 = {...}; //2-й объект
// и тд

void loop{
int select = 0;
if (left) select--; //кнопка лево
if (right) select++; //кнопка право
// Serial.print И вот тут проблема
}

Но как вывести информацию с нужного мне объекта (и переходить между ними), я что-то никак не пойму)

В принципе, кол-во самих объектов заранее известно. Можно дать им одинаковые название с разницей в цифре на конце.

Помогите, пожалуйста, новичку. Такое ощущение, что прям какого-то простого шага не хватает:)

sadman41
Offline
Зарегистрирован: 19.10.2016
Strobject menu[3] = {
{...}, //1-й объект
{...}, //2-й объект
{...}, //3-й объект
};

if ((select > 0) && left) select--;
if ((select < 3) && left) select++;

Serial.print(menu[select].text);

 

Senovik
Offline
Зарегистрирован: 06.10.2018

sadman41, огромное спасибо, как-то я не догадался их завернуть в массив)