ОК !! Всем спасибо :))
Получается никак нельзя сделать со switch да??
Просто если заменять его IF, то получится очень много ветвлений (я хотел в switch много case'ов наставить). Это не повредит... эээ... производительности? ;)
И еще раз сенькс!
Ээээээ... даже стыдно писать-то ;)
В операторе switch в case нельзя использовать функции?
Например:
char str[] = "privet";
int number = 0;
switch (number)
{
case (strcmp(str, "privet")): cout << "Проканало !!!" ; break;
default: cout << "Не совсем проканало"; break;
}
Ведь strcmp должна вернуть 0, и тогда должно выполниться 1-е условие... Но компилятор говорит: constant expression required in function main()
В чем проблема? Спасибо всем ;)
[C++] Switch меня не понимает28.03.03 22:01 Автор: + <Mikhail> Статус: Elderman
> Ээээээ... даже стыдно писать-то ;) > В операторе switch в case нельзя использовать функции? > Например: > > char str[] = "privet"; > int number = 0; > switch (number) > { > case (strcmp(str, "privet")): cout << > "Проканало !!!" ; break; > default: cout << "Не совсем проканало"; break; > } > > Ведь strcmp должна вернуть 0, и тогда должно выполниться > 1-е условие... Но компилятор говорит: constant expression > required in function main() > В чем проблема? Спасибо всем ;)
Tebe zhe compiler govorit v chem problema!
[C++] Немного более подробный ответ :)28.03.03 22:44 Автор: Sandy <Alexander Stepanov> Статус: Elderman
> > Ээээээ... даже стыдно писать-то ;) > > В операторе switch в case нельзя использовать функции? > > Например: > > > > char str[] = "privet"; > > int number = 0; > > switch (number) > > { > > case (strcmp(str, "privet")): cout << > > "Проканало !!!" ; break; > > default: cout << "Не совсем проканало"; > break; > > } > > > > Ведь strcmp должна вернуть 0, и тогда должно > выполниться > > 1-е условие... Но компилятор говорит: constant > expression > > required in function main()
Здесь компилер тебе говорит: требуется выражение-константа, т.е. вместо выражения, которое рассчитывается на этапе ран-тайм, должно стоять выражение, которое можно рассчитать на этапе компиляции. В данном случае вместо strcmp(str, "privet") должна стоять константа.
> > В чем проблема? Спасибо всем ;) > > Tebe zhe compiler govorit v chem problema!
[C++] Немного более подробный ответ :)29.03.03 02:50 Автор: alien <Андрей> Статус: Member
Просто замени эту конструкцию оператором if:
char str[] = "privet";
int number = 0;
if (strcmp(str, "privet") == number)
cout << "Проканало !!!"
else
cout << "Не совсем проканало";
Всем спасибо, и еще маленький вопрос :)29.03.03 11:01 Автор: wade Статус: Незарегистрированный пользователь
ОК !! Всем спасибо :))
Получается никак нельзя сделать со switch да??
Просто если заменять его IF, то получится очень много ветвлений (я хотел в switch много case'ов наставить). Это не повредит... эээ... производительности? ;)
И еще раз сенькс!
Всем спасибо, и еще маленький вопрос :)29.03.03 18:18 Автор: vh <Дмитрий> Статус: Member Отредактировано 29.03.03 18:22 Количество правок: 3
> ОК !! Всем спасибо :)) > Получается никак нельзя сделать со switch да?? > Просто если заменять его IF, то получится очень много > ветвлений (я хотел в switch много case'ов наставить). Это > не повредит... эээ... производительности? ;) > И еще раз сенькс! Язык Си является относительно низкоуровневым языком и поэтому данная конструкция тоже реализована на уровне проще некуда.
А для того чтобы делать какты хочешь надо юзать след. конструкции:
if(условие1)
что делать1;
else if(условие2)
что делать2;
else if(условие3)
что делать3;
.....
else
что делать по дефолту;
---
нормальный вариант, производительности не повредит.
Всем спасибо, и еще маленький вопрос :)29.03.03 20:08 Автор: dl <Dmitry Leonov>
> > ОК !! Всем спасибо :)) > > Получается никак нельзя сделать со switch да?? > > Просто если заменять его IF, то получится очень много > > ветвлений (я хотел в switch много case'ов наставить). > Это > > не повредит... эээ... производительности? ;) > > И еще раз сенькс! > Язык Си является относительно низкоуровневым языком и > поэтому данная конструкция тоже реализована на уровне > проще некуда. > А для того чтобы делать какты хочешь надо юзать след. > конструкции: > >
> if(условие1)
> что делать1;
> else if(условие2)
> что делать2;
> else if(условие3)
> что делать3;
> .....
> else
> что делать по дефолту;
>
---
> > нормальный вариант, производительности не повредит.
На самом деле надо уточнить постановку. В вопросе был такой код:
char str[] = "privet";
int number = 0;
switch (number)
{
case (strcmp(str, "privet")): cout << "Проканало !!!" ; break;
default: cout << "Не совсем проканало"; break;
}
Если даже в развитии кода, где планировалось втыкать много case, речь пойдет об аналогичном сравнении результата какой-нибудь функции с заранее известными значениями, то никто мешает воткнуть эту функцию до switch, и потом проверять уже как положено. Несколько тактов этим, пожалуй, удастся сэкономить :)