информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медСетевые кракеры и правда о деле ЛевинаЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Всем спасибо, и еще маленький вопрос :) 29.03.03 11:01  Число просмотров: 1058
Автор: 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, и потом проверять уже как положено. Несколько тактов этим, пожалуй, удастся сэкономить :)
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach