Привет, всем!
Я новичок в С так что не ругайтесь на тупые вопросы
Надо сделать case с выбором из диапазона.
На делфе это выглядит так
Case ch of
'0'..'4':Begin...End;
'7'..'9':Begin...End;
End;
Вопрос, как это сделать на С?
Здравствуйте, Oxy, Вы писали:
Oxy>Я новичок в С так что не ругайтесь на тупые вопросы
Oxy>Надо сделать case с выбором из диапазона.
Oxy>Вопрос, как это сделать на С?
1) по-тупому
switch( SomeChar() ) // вычисляем единожды
{
case '0': case '1': ..... case '4': { } break;
case '7': case '8': case '9': { } break;
default: { }
}
2) через if
char ch = SomeChar(); // вычисляем единожды
if (ch >= '0' && ch <= '4') then { }
else if(ch >= '7' && ch <= '9') then { }
else { }
3) через свертку
typedef enum { CH_0_4, CH_7_9, CH_DEFAULT } CH_TYPE;
CH_TYPE types[10] = { CH_0_4, CH_0_4, ... CH_0_4,
CH_DEFAULT, ... CH_DEFAULT,
CH_7_9, CH_7_9, CH_7_9
};
.....
CH_TYPE type = (ch < '0' || ch > '9') ? CH_DEFAULT : types[ch-'0'];
switch(type)
{
case CH_0_4: { } break;
case CH_7_9: { } break;
default: { }
}
по-другому, увы, никак.
(=^.^=) Neko ... << RSDN@Home 1.0 beta 6a >>
Здравствуйте, Oxy, Вы писали:
Oxy>Жаль что в С++ нет удобной возможности определять диапазоны в case как в Делфях.
Это — к Кернигану и Ритчи, которые придумали Си. И к Страуструпу, который не стал расширять.
А на самом деле, в паскале есть такие конструкции, как
диапазон и
множество. В сях их просто нет, поэтому вводить синтаксис вида
case x..y, z, t :
оказалось неестественно.
Жалко, а что поделаешь.
(=^.^=) Neko ... << RSDN@Home 1.0 beta 6a >>