0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 8
|
||||||
1 | ||||||
Как правильно применять оператор switch30.07.2012, 21:03. Показов 1382. Ответов 16
Метки нет (Все метки)
Подскажите пожалуйста, в чём здесь ошибка. Язык С++. Среда C++ Builder 6.
0
|
30.07.2012, 21:03 | |
Ответы с готовыми решениями:
16
Как работает оператор switch? Как использовать оператор switch в структуре Как сделать меню используя оператор switch Как через оператор switch производить битовые операции? |
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
|
||||||
30.07.2012, 21:12 | 2 | |||||
1
|
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 8
|
|
30.07.2012, 21:20 [ТС] | 3 |
И так тоже не работает. Суть в следующем. При любом вводимом а всё равно выдаёт надпись "Ошибка" и неправильно считает. Хотя, если убрать оператор switch, то считает правильно.
0
|
48 / 11 / 2
Регистрация: 26.03.2012
Сообщений: 246
|
|
30.07.2012, 21:25 | 4 |
Дай условие задачи
0
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
||||||
30.07.2012, 21:26 | 5 | |||||
Это, правда, по видимому, Microsoft-специфичная особенность. Потому что у них в MSDN написано то, что выше, а в стандарте написано, что ничего не должно выполняться.
1
|
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
|
|
30.07.2012, 21:28 | 6 |
Он выдает надпись "Ошибка" только тогда когда в Edit1 вы водите 1, тогда переменой а присваевается значение 2 и выводится сообщение об ошибке!
по приведенным формулам в коде все правильно считает! Будьте внимательны!
1
|
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 8
|
|
30.07.2012, 21:47 [ТС] | 7 |
Действительно, если ввожу единицу, то результат получается такой, как если бы я ввёл 2. Но, тогда я вообще получается ничего не понимаю. Ведь по условию оператора switch, срабатывать должно именно то значение переменной а, которое именно я ввёл (т.е. 2). А здесь почему-то switch срабатывает на единицу. Почему же так?
0
|
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
|
|||||||||||
30.07.2012, 21:50 | 8 | ||||||||||
потому что
1
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|||||||||||
30.07.2012, 21:52 | 9 | ||||||||||
Потому что надо внимательнее читать учебники. Вот эти два куска кода эквивалентны:
1
|
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 8
|
|
30.07.2012, 22:08 [ТС] | 10 |
Действительно, если записать
case 24: a = 2; то оператор switch срабатывает на 24; если же я записываю case 4: a = 2; то оператор switch срабатывает на 4; Но ведь он-то должен срабатывать не на номер запрграммированного случая, а на то, что присвоено переменной! А здесь от переменной, получается, ничего не зависит?
0
|
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
|
|||||||||||
30.07.2012, 22:15 | 11 | ||||||||||
ну как это не зависит??
Теперь смотрим что вы записываете в переменную а.
в вашем коде a = 2 выполняется тогда когда вы зашли в switch!
1
|
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 8
|
|
30.07.2012, 22:37 [ТС] | 12 |
Я именно так и думал. Однако, на практике получается следующее:
case 1: a=2; // switch реагирует не на 2, а на единицу; case 4: a=2; // switch реагирует не на 2, а на четвёрку; case 6: a=2; // switch реагирует не на 2, а на шестёрку; case 9: a=2; // switch реагирует не на 2, а на девятку; Но ведь 1, 4, 6 и 9 - это всего лишь номера case (правильно?), а переменной "а" везде присвоено значение 2. И я, присвоив переменной "а" значение 2, ожидаю (планирую), что switch сработает именно тогда, когда я введу 2. А switch, вместо этого срабатывает на те же 1, 4, 6 и 9. Это как-то не понятно.
0
|
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
|
|||||||||||
30.07.2012, 22:50 | 13 | ||||||||||
давайте сначала
поехали!
1
|
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 8
|
|
30.07.2012, 23:12 [ТС] | 14 |
Действительно, если из моей первичной записи убрать а = 2; то всё работает правильно.
Т.е. void __fastcall TForm1::Button1Click(TObject *Sender) { int a,a1,b,e1; a=Edit1->Text.ToInt(); b=Edit2->Text.ToInt(); switch (a) { case 1: Label3->Caption="Ошибка"; break; } a1=a*60; e1=a1+b; Label7->Caption=e1; } Получается что в этой записи то, что следует непосредственно за case и есть эта самая переменная "а"?
0
|
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
|
|
30.07.2012, 23:14 | 15 |
1
|
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 8
|
|
30.07.2012, 23:26 [ТС] | 16 |
Большое спасибо за помощь. Прежде чем выйти на форум я перерыл всё, что смог. Но из тупика сам так и не вышел. Ещё раз, большое спасибо Вам за помощь. Вопросы, конечно некоторые остались. Но с ними я ещё раз попробую справиться сам. Спокойной ночи.
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,514
|
|||||||||||
30.07.2012, 23:38 | 17 | ||||||||||
со свитчем ты разобрался а с программой
что она должна делать ???? сейчас она делает так если a==1 то a будет равна 2 напишет ошибку и далее идут вычисления ты этого хотел??? если нет то нужно писать так
0
|
30.07.2012, 23:38 | |
30.07.2012, 23:38 | |
Помогаю со студенческими работами здесь
17
Как правильно использовать оператор else? Как правильно перегрузить оператор [] = Как правильно перегружать оператор? Оператор switch Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |