Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Правильная запись перечисления, Запись всего enum сразу. 
:(
    Опции темы
EgorTheBlade
Дата 26.9.2010, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 5.12.2009

Репутация: нет
Всего: -1



Добрый День.Возникла проблема при записи всего перечисления в функцию.
Допустим есть 
Код

enum color{ red = 1 ,blue,white}
void f(short type) { 
write (type);
}
 где type - номер цвета.
Как записать всё перечисление?все цвета.
Например вывод на экран не одно значение 
Код

void f(short type)
{
if (type == 1)std::cout<<"Red";
// 
}

а все ?

Дополнительное значение не получается - записать может сразу только  в один поток и только один тип.

Это сообщение отредактировал(а) EgorTheBlade - 26.9.2010, 20:59
PM MAIL Skype   Вверх
Cheloveck
Дата 26.9.2010, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 3
Всего: 32



Вопрос задай подробнее и на русском языке.


--------------------
user posted image
PM Jabber   Вверх
Crafty
Дата 26.9.2010, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 2
Всего: 14



EgorTheBlade, не совсем понятен вопрос, но может быть так:
Код

enum color{ red = 1 ,blue,white};

void f(color c)
{
  switch (c){
    case red: std::cout << "Red ";
    case blue: std::cout << "Blue ";
    case white: std::cout << "White ";
  }
 }

int main()
{
  f(red);
  return 0;
}



Это сообщение отредактировал(а) Crafty - 26.9.2010, 20:14
PM MAIL   Вверх
azesmcar
Дата 26.9.2010, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Код

enum color
{
    red,
    blue,
    white
};
std::string color_text[] =
{
    "red",
    "blue",
    "white"
};

std::cout << color_text[red];


Добавлено через 1 минуту и 19 секунд
Цитата(EgorTheBlade @  26.9.2010,  18:37 Найти цитируемый пост)
Дополнительная значение не получается - записать может сразу только  в один поток и только один тип.

что такое "дополнительные значения"?
PM   Вверх
EgorTheBlade
Дата 26.9.2010, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 5.12.2009

Репутация: нет
Всего: -1



Вы выводите одно значение:Мне нужно вывод всего перечисление сразу.
Код

enum color {red = 1,blue , white }

Не вывод
Код

 case red:std::cout<<"red";

 а всего "red, blue , white";
Цитата(azesmcar @  26.9.2010,  20:16 Найти цитируемый пост)
что такое "дополнительные значения"? 

Например
Код

 enum color {red =1 ,blue ,white ,all_colors} 
if (all_color)std::cout<<"red ,blue ,white";



Это сообщение отредактировал(а) EgorTheBlade - 26.9.2010, 20:55
PM MAIL Skype   Вверх
mes
Дата 26.9.2010, 21:11 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



пример 1: енум как набор битовых флагов :
http://codepad.org/CRikPaoF  

Код

enum EColor { eRed        = 1<<0,
              eGreen      = 1<<1, 
              eBlue       = 1<<2 
            };

void printColors (unsigned long l) 
{
   if (l & eRed) std::cout << "Red ";
   if (l & eGreen) std::cout << "Green ";
   if (l & eBlue) std::cout << "Blue ";
}

int main ()
{
     printColors ( eRed | eBlue );
}

пример 2 : как массив значений :
http://codepad.org/KpEARsga  
Код

enum EColor { eRed, eGreen,  eBlue };

const char * color_name[] = { "red", "green", "blue" };

EColor colors[] = { eRed, eGreen };
size_t colors_size = sizeof(colors)/ sizeof(*colors);

int main ()
{
      for (size_t i =0; i < colors_size; ++i)
        std::cout << color_name[colors[i]] << ", ";
}

ну и третий вариант, для каждой вариации  создать свой енум.

все зависит от целей.. 


Это сообщение отредактировал(а) mes - 26.9.2010, 21:28


--------------------
PM MAIL WWW   Вверх
djamshud
Дата 26.9.2010, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



Код

enum color_t{red=1,green,blue,...,color_max};

void f(int color){
switch(color){
case red:cout<<"red";break;
....
case color_max:
for(int i=1;i<color_max)f(i);break;
}}



Добавлено через 1 минуту и 35 секунд
Запятые, надеюс. сами догадаетесь как между ними поставить?:)

ЗЫ. Может быть mes предложил то же самое, но у меня codepad не открывается. Не понимаю, зачем выкладывать небольшие исходники на него, а не прямо сюда...


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
mes
Дата 26.9.2010, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(djamshud @  26.9.2010,  20:17 Найти цитируемый пост)
но у меня codepad не открывается. Не понимаю, зачем выкладывать небольшие исходники на него, а не прямо сюда... 

подправил smile чего то и правду он впоследнее время подвисать стал.. :(


Это сообщение отредактировал(а) mes - 26.9.2010, 21:29


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 26.9.2010, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  26.9.2010,  21:28 Найти цитируемый пост)
чего то и правду он впоследнее время подвисать стал..

[типа реклама]для этого и был создан liveworkspace.org ;)[/типа реклама]
PM WWW   Вверх
xvr
Дата 27.9.2010, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Вариант (несколько громоздкий, но все же)

Файл enum_def.inc
Код

EDEF(red)
EDEF(green)
EDEF(blue)


Файл .cpp
Код

#define EDEF(v) v,
enum Colors {
#include "enum_def.inc"
TotalColors
};

struct ColorDef {
 const char* id;
 Colors color;
};
ColorDef colors_ids[]={
#undef EDEF
#define EDEF(v) {#v,v},
#include "enum_def.inc"
{0}
};
Дальше делаете с массивом colors_ids все, что хотите

PM MAIL   Вверх
EgorTheBlade
Дата 27.9.2010, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 5.12.2009

Репутация: нет
Всего: -1



Спасибо всем за помощь.
PM MAIL Skype   Вверх
Torsten
Дата 29.9.2010, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 10.6.2008
Где: Pskov

Репутация: 3
Всего: 7



Код

enum En_Color
{
    COLOR_RED,
    COLOR_GREEN,
    COLOR_BLUE,
    COLOR_LAST,
    COLOR_FIRST = COLOR_RED,
};

const char * sColorText = {
    "red",
    "green",
    "blue"
};

std::ostream & operator << (std::ostream & strm, En_Color nColor)
{
    if (nColor >= COLOR_FIRST && nColor < COLOR_LAST)
          strm<<sColorText[nColor];
    else
          strm<<"Unknown color ("<<int(nColor)<<")";
}

int main()
{
    for (En_Color nColor = COLOR_FIRST; nColor < COLOR_LAST; ++nColor)
        cout<<nColor;
}



Это сообщение отредактировал(а) Torsten - 29.9.2010, 13:32
--------------------
We have no begining, we have no end. We are infinite.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0876 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.