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

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

Войти
Регистрация
Восстановить пароль
 
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
#1

Оператор switch - C++

09.09.2012, 18:14. Просмотров 561. Ответов 8
Метки нет (Все метки)

Ниже приведены три примера (1 и 2 работают, а 3 почему-то не работает). Говорит, что пропуск инициализации? Почему тогда 1 и 2 работают, а 3 нет?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//main
 
int a = 2;
 
switch(a){
 case 1:
    int b;
    b= 2;
    break;
 case 2:
    break;
 
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//main
 
int a = 2;
 
switch(a){
 case 1:
   {
       int b = 2
   }
    break;
 case 2:
    break;
 
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//main
 
int a = 2;
 
switch(a){
 case 1:
    int b = 2;
 
    break;
 case 2:
    break;
 
}
Добавлено через 33 минуты
up....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2012, 18:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Оператор switch (C++):

С++.Оператор switch. - C++
Не могу избавиться от ошибки в программном коде. #include <iostream> #include <math.h> #include <conio.h> using namespace std; ...

оператор switch - C++
Задача весьма проста, необходима для тренировки. Я должен использовать оператор свитч таким образом, что после ввода определенного символа...

Cи++. Оператор switch. - C++
У меня такой вопрос. Есть задача: с 1 января 1990 года по некоторый день прошло n месяцев, определить название месяца текущего. Ну как...

Оператор switch - C++
целое число в диапазоне 0 – 9. Вывести строку — название соответствующей цифры на английском языке (0 — "zero", 1 — "one", 2 — "two", ...)....

Оператор Switch - C++
Нужно помощь с этим оператором может быть где-то направильно написал ??? со всеми функциями ответ выходет не верно, "res" - не меняет свое...

Оператор switch - C++
Даны два целых числа: D (день) и M (месяц), определяющие правильную дату невисокосного года. Вывести значения D и M для даты,...

8
Байт
Эксперт C
16355 / 10631 / 1592
Регистрация: 24.12.2010
Сообщений: 20,279
09.09.2012, 18:22 #2
Ты, видимо, работаешь в чистом C. А там переменные объявлять можно только в начале блока.
Кстати, при выходе из switch твоя b в любом случае потеряется
0
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
09.09.2012, 18:27  [ТС] #3
Цитата Сообщение от Байт Посмотреть сообщение
Ты, видимо, работаешь в чистом C. А там переменные объявлять можно только в начале блока.
Кстати, при выходе из switch твоя b в любом случае потеряется
Я работаю в чистом C++. Ошибка выдаётся только в последнем пункте, говорит, пропуск инициализации. Остальные работают. Попробуйте у себя так сделать (3 пункт).
Что получится?
0
Байт
Эксперт C
16355 / 10631 / 1592
Регистрация: 24.12.2010
Сообщений: 20,279
09.09.2012, 18:35 #4
Цитата Сообщение от Байт Посмотреть сообщение
переменные объявлять можно только в начале блока.
Это понятно?

Цитата Сообщение от bgm313 Посмотреть сообщение
Попробуйте у себя так сделать (3 пункт).
А зачем? Я и так вижу, что это ошибка
0
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
09.09.2012, 18:38  [ТС] #5
......

Добавлено через 3 минуты
Цитата Сообщение от Байт Посмотреть сообщение
переменные объявлять можно только в начале блока.
В C++ переменные объявляются где-угодно внутри блока.
0
zss
Модератор
Эксперт С++
6486 / 6049 / 1987
Регистрация: 18.12.2011
Сообщений: 15,691
Завершенные тесты: 1
09.09.2012, 18:44 #6
Дело в том, что если нет фигурных скобок (как во втором примере),
то компилятору непонятна область действия переменной b.
Вот он и матерится.
0
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
09.09.2012, 18:48  [ТС] #7
Цитата Сообщение от zss Посмотреть сообщение
Дело в том, что если нет фигурных скобок (как во втором примере),
то компилятору непонятна область действия переменной b.
Вот он и матерится.
А 1 пример почему тогда работает?
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
09.09.2012, 18:49 #8
Цитата Сообщение от zss Посмотреть сообщение
Дело в том, что если нет фигурных скобок (как во втором примере),
то компилятору непонятна область действия переменной b.
Вот он и матерится.
Да всё там понятно: от определения до конца свитча насквозь через все кейсы.

Матерится он, потому что не знает, куда пристроить инициализацию этой переменной и что делать, если не дай бог прыжок будет на case 2 — ожидается ли инициализация или нет. Потому что он её с одной стороны должен выполнять, потому что переменная видна, а с другой стороны нет, потому что мы на этот код не прыгали. Поэтому во избежание тупых ошибок от жонглирования кейсами он считает это ошибкой. В первом случае всё ясно: не выполнять, это явно написано. Во втором она вообще в своём личном блоке и не видна в других кейсах.
1
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.09.2012, 19:20 #9
приведи весь код случаев первого и последнего (со вторым вме и так ясно). первый случай кажется тоже некомпилируемым.

Добавлено через 25 минут
вот такое нашел объяснение:

The C++ standard says (C++03 §6.7):

It is possible to transfer into a block, but not in a way that bypasses declarations with initialization. A program that jumps(77) from a point where a local variable with automatic storage duration is not in scope to a point where it is in scope is ill-formed unless the variable has POD type (3.9) and is declared without an initializer (8.5).

(*) The transfer from the condition of a switch statement to a case label is considered a jump in this respect.
0
09.09.2012, 19:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2012, 19:20
Привет! Вот еще темы с ответами:

оператор switch - C++
КАк сделать чтобы при выборе неправильного ответа во втрой switch программа не в ходила int main(){ char v1; cout <<"Pervui...

Оператор switch C++ - C++
Вместо вывода на экран отрицательных значений, работает default. Так же при вводе двухзначного числа выводит первую цифру этого же числа....

Оператор switch - C++
Возникла проблема. Не хочет высчитываться "v". Что не так? #include <iostream.h> #include <math.h> main () { int k; double...

оператор Switch???? - C++
Люди добрые помогите что здесь не так не пойму #include<conio.h> #include<stdio.h> #include<iostream> using namespace std; ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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