Можно ли так использовать Struct?
От: cogito  
Дата: 14.02.05 14:58
Оценка:
Следующий код нужен для того что бы проверять содержимое ячейки. Ячейки имеют индекс 3,4,5,6,7,8,9,10,16, поскольку последняя ячейка находится на определеной дистанции то решил не использовать array а попытатся решить проблему другими средствами.
Меня интересует, является то что я пытаюсь(в этом коде) сделать выполнимым или это не соответсвует стандарту?
struct square {
           char a;     // каждая буква это ячейка
           char b;
           char c;
           char d;
           char e;
           char f;
           char g;
           char h;
           char n;
              };

struct square *bol = {0};


функция которая делает проверку:
В даный момент я еще не написал ее поскольку bol->control_val = константа; ясно что является неправильно.
int legal_move_checker(int control_val)
   {
      control_val = control_val + 94; // Перевод индекса в букву
      
      bol->control_val = константа; 
    
      return 0;
   }


Теперь скажем если control_val содержит номер соответсвующий одной из букв, есть ли подходящий синтаксис что бы заставить стракт поверить bol->b?

P.S. Сам не являюсь програмистом(и не собираюсь учится на такого, Си нужен только для прикладных целей в моей специальности), так что возможно и не совсем верно выразил вопрос.

14.02.05 23:00: Перенесено модератором из 'C/C++. Прикладные вопросы' — Павел Кузнецов
Re: Можно ли так использовать Struct?
От: Кодт Россия  
Дата: 14.02.05 15:18
Оценка: 2 (1)
Здравствуйте, cogito, Вы писали:

C>Теперь скажем если control_val содержит номер соответсвующий одной из букв, есть ли подходящий синтаксис что бы заставить стракт поверить bol->b?


Нет, такого в языке С++ не предусмотрено.
Но можно сделать иначе
struct square {
  char vals['n'-'a'+1]; // от a до n включительно
};

...

square sq = { {0} };

...

sq.vals[index]; // по индексу: 0='a', 1='b', 2='c' и т.д.
sq.vals[letter - 'a']; // по имени
Перекуём баги на фичи!
Re[2]: Можно ли так использовать Struct?
От: Аноним  
Дата: 14.02.05 16:18
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Нет, такого в языке С++ не предусмотрено.

Та среда на которой я пишу, CVI ближе к ANSI C, плас пласом не имеет связи.
Но это моя вина что не указал.

К>struct square {
К>  char vals['n'-'a'+1]; // от a до n включительно
К>};

К>square sq = { {0} };

К>sq.vals[index]; // по индексу: 0='a', 1='b', 2='c' и т.д.
К>sq.vals[letter - 'a']; // по имени
К>


Вообщем в таком случае можно обойтись простым array даже не используя struct. Вся цель была обойтись без бесмысленого выделения лишней памяти. Скажем для индексов от 3 до 10 можно сделать просто i-3, но вся проблема что от 11-15 индексы относятся к другим параметрам(я работаю с графикой так у каждого элемента свой индекс обращения) а последняя ячейка имеет индекс 16(так уж получилось, в ручную это править категарически не советуется), выходит штук 5 лишней памяти(которая будед static на протяжение всей проги). Пытаясь извратится со страктом пытался написать этот код более экономически.

Ладно в любом случае огромное спасибо за ответ.
Re[3]: Можно ли так использовать Struct?
От: cogito  
Дата: 14.02.05 16:20
Оценка:
Последний пост был мой.
Re[3]: Можно ли так использовать Struct?
От: Кодт Россия  
Дата: 14.02.05 16:27
Оценка: 2 (1)
Здравствуйте, Аноним, Вы писали:

А>Вообщем в таком случае можно обойтись простым array даже не используя struct. Вся цель была обойтись без бесмысленого выделения лишней памяти. Скажем для индексов от 3 до 10 можно сделать просто i-3, но вся проблема что от 11-15 индексы относятся к другим параметрам(я работаю с графикой так у каждого элемента свой индекс обращения) а последняя ячейка имеет индекс 16(так уж получилось, в ручную это править категарически не советуется), выходит штук 5 лишней памяти(которая будед static на протяжение всей проги). Пытаясь извратится со страктом пытался написать этот код более экономически.


Ну, можно сделать отдельно транслятор имя-индекс.
enum { name_a, name_b,.....,name_n, name__count };

char index2name(int n) { /* табличным способом */ }
int name2index(char ch) { /* поиск в таблице */ }
Перекуём баги на фичи!
Re[4]: Можно ли так использовать Struct?
От: cogito  
Дата: 14.02.05 19:07
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Ну, можно сделать отдельно транслятор имя-индекс.



Ну я уже решил.
Просто написал функцию транслятор одного индекса в другой.

/* Convert control's index to function index */
int convert_control2index(int control_val)
{
int value;

if (control_val != 16)
value = control_val — 3;
else
value = control_val — 8;

return value;
}

Не очень то красиво так писать, ну да ладно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.