Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
#1

Почему в switch нельзя определять переменные? - C++

21.07.2013, 14:27. Просмотров 619. Ответов 7
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
    setlocale(LC_ALL, "Russian");
 
    int n;
 
    std::cout << "Введите число: ";
    std::cin >> n;
 
    switch (n)
    {
        case 1:     int i=5;  break;
        case 2:     double x=3.14;  break;  // пропуск инициализации "i" из-за метки "case"
    }
 
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2013, 14:27     Почему в switch нельзя определять переменные?
Посмотрите здесь:

Почему нельзя подставлять переменные в выражения #if #else? - C++
Почему код работает, не должен же, потому что выражение стоящее после #if вычисляется на этапе компиляции, переменные подставлять нельзя?? ...

Почему нельзя использовать в операторе case переменные, которые определены как #define - C++
Я не понимаю, почему Visual Studio ругается на строку с case в коде. Вроде все правильно. Если там написать напрямую цифру, тогда все...

Символьные переменные и оператор switch - C++
1)Описать символьную переменную char cH. Получить с клавиатуры один из символов &quot;А, В, С, D&quot;. Используя оператор switch определить какой...

Почему break нельзя использовать в if? - C++
почему break нельзя использовать в if вот код if(f.eof()==1) { break; } про break MVS говорит что ОПЕРАТОР break...

почему не видет switch? - C++
#include &lt;iostream&gt; #include&lt;conio.h&gt; #include&lt;stdio.h&gt; using namespace std; int menu();

Почему нельзя так объявить двумерный массив? - C++
Ошибка возникает если для массива tempArray при объявлении(и одновременной инициализации) использовать переменную(size) которую принимает...

Почему нельзя выделить статически кусок в ~100 MB? - C++
Есть код #include &lt;iostream&gt; using namespace std; enum { length = 256, count = 50 }; struct Town { char name =...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Discoverer
16 / 14 / 2
Регистрация: 05.07.2013
Сообщений: 27
21.07.2013, 14:30     Почему в switch нельзя определять переменные? #2
C++
1
2
3
4
5
 switch (n)
    {
        case 1:    { int i=5;  break; }
        case 2:     double x=3.14;  break;
    }
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
21.07.2013, 14:31     Почему в switch нельзя определять переменные? #3
Заключите коды каждой ветки в фигурные скобки.
C++
1
case ...{int x; ... ;break;}
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
21.07.2013, 14:38  [ТС]     Почему в switch нельзя определять переменные? #4
Цитата Сообщение от Croessmah Посмотреть сообщение
Заключите коды каждой ветки в фигурные скобки.
и все таки из-за чего эта ошибка? пропуск инициализации "i" из-за метки "case"
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
21.07.2013, 14:43     Почему в switch нельзя определять переменные? #5
Поясню.
C++
1
2
3
4
5
    switch (n)
    {
        case 1:     int i=5;  break;
        case 2:     double x=3.14;  break;
    }
Переменные i и x находятся в одной области видимости, и, если n==2, получится что i не будет определена, вопреки здравому смыслу.
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,224
Записей в блоге: 1
Завершенные тесты: 1
21.07.2013, 15:55     Почему в switch нельзя определять переменные? #6
Попробую объяснить более понятно - если бы это было разрешено, то такой код считался бы валиндым
C++
1
2
3
4
5
    switch (n)
    {
        case 1:     int i=5;  break;
        case 2:     ++i;  break;
    }
при n == 2 где-то бы умер один маленький котенок
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
21.07.2013, 17:36  [ТС]     Почему в switch нельзя определять переменные? #7
Цитата Сообщение от Kastaneda Посмотреть сообщение
при n == 2 где-то бы умер один маленький котенок
почему умер?! наоборот, родился бы (++i)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2013, 09:12     Почему в switch нельзя определять переменные?
Еще ссылки по теме:

Почему нельзя написать просто - using namespace boost; - C++
Доброго времени суток. В общем, есть программа, в которой я использую тип cpp_int. Вроде его объявление содержится в заголовочном файле...

Почему нельзя компилировать отдельный заголовочный файл? - C++
Вообще можно весь код поместить в один .cpp файл. Но, как я понимаю, люди советуют все функции помещать в отдельные заголовочные файлы. А...

Почему таким способом нельзя создать массив? - C++
Хочу создать массив вот таким способом, но выскакивает ошибка error C2057: требуется константное выражение. Ведь у меня и так константа!?...

Почему два char нельзя сравнивать так ==? - C++
Почему два char нельзя сравнивать так ==?

Почему нельзя объявить указатель на шаблонную структуру? - C++
template &lt;class T&gt; typedef struct per { T znach; int kol_vo_povt; }* p; int main() { per&lt;int&gt; k; }


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
SatanaXIII
Супер-модератор
Эксперт С++
5593 / 2627 / 240
Регистрация: 01.11.2011
Сообщений: 6,461
Завершенные тесты: 1
22.07.2013, 09:12     Почему в switch нельзя определять переменные? #8
Очень интересно. Область видимости у нас ограничена скобочками при switch, но при этом внутри них выполнится только то, что начинается с case. Это я к тому, что хоть и борландовый компилятор это хавает, но пишет предупреждение о недостижимости кода. Тогда как если сразу объявить и проинициализировать переменную, то уже выдает ошибку.
C++
1
2
3
4
5
6
7
8
9
int n = 1;
switch(n)
  {
  int x = 0; // Ошибка
  int t;  // Ништяк
  t = 0;  // Ништяк
  case 1 : {int i=5;  ShowMessage(t);} break;
  case 2 : n++; break;
  }
ShowMessage покажет мусор. То есть не ноль. Но при этом не заругается, так как переменная объявлена.
Yandex
Объявления
22.07.2013, 09:12     Почему в switch нельзя определять переменные?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru