Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | | |
Всем спасибо, и еще маленький вопрос :) 29.03.03 11:01 Число просмотров: 992
Автор: wade Статус: Незарегистрированный пользователь
|
ОК !! Всем спасибо :))
Получается никак нельзя сделать со switch да??
Просто если заменять его IF, то получится очень много ветвлений (я хотел в switch много case'ов наставить). Это не повредит... эээ... производительности? ;)
И еще раз сенькс!
|
<programming>
|
[C++] Switch меня не понимает 28.03.03 21:48
Автор: wade Статус: Незарегистрированный пользователь
|
Ээээээ... даже стыдно писать-то ;)
В операторе 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, и потом проверять уже как положено. Несколько тактов этим, пожалуй, удастся сэкономить :)
|
|
|