Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
21 / 55 / 9
Регистрация: 29.09.2011
Сообщений: 617

Warning в switch

25.01.2015, 21:20. Показов 1595. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пондобилось сделать такую конструкцию switch:

C++
1
2
3
4
5
6
7
8
switch(point.x){
 case 0:
  if(point.y >100) break;
 case 10:
  if(point.y >50) break;
 std::cout << "+++"<< std::endl;
 break;
}
Компилятор подчёркивает, мол не хватает break'а для "case 0:". Как объяснить ему, что я знаю, что делаю?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.01.2015, 21:20
Ответы с готовыми решениями:

Warning C4101 и warning C4996
Здравствуйте, пишу программу &quot;Домашняя видеотека&quot;, в которой необходимо реализовать запить информации про фильм и поиск по жанру, и что бы...

Оптимальная конструкция switch-case-while / while-switch-case
Имеется конструкция типа: switch() { case 1: while() { ... }

While{switch{switch{break;}}} break выходит из while
В общем необходимо конструкцию switch запускать в цикле, в каждом case X: стоит свой break;, да бы выполнился один case, а не все. Проблема...

18
 Аватар для Tordek
58 / 51 / 38
Регистрация: 22.01.2015
Сообщений: 176
25.01.2015, 21:23
break у тебя в case 0 віполняется только если правдивый if. Допиши рядом ещё один(как ты сделал в 10 кейсе) или под if допиши else break;
0
0 / 0 / 0
Регистрация: 28.05.2014
Сообщений: 10
25.01.2015, 21:25
Добавьте continue; в case 0 для продолжения.
Switch - циклическая структура
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
25.01.2015, 21:33
Цитата Сообщение от _20_ Посмотреть сообщение
Компилятор подчёркивает, мол не хватает break'а для "case 0:"
А что за компилятор?
У меня ни на одном ничего такого не показывает (да и не должен вообще-то).
И да, continue в switch не будет работать.
0
 Аватар для Tordek
58 / 51 / 38
Регистрация: 22.01.2015
Сообщений: 176
25.01.2015, 21:34
Цитата Сообщение от PolyProgrammist Посмотреть сообщение
Добавьте continue;
Боюсь, это в данном случае не поможет, будет пропущена данная итерация, а дальше куда? Опять в свитч? Надёжнее уж break в данной ситуации..
1
21 / 55 / 9
Регистрация: 29.09.2011
Сообщений: 617
25.01.2015, 21:54  [ТС]
Tordek, дело в том, что там и не должно быть break'а. Я хочу убрть warning'и, поскольку там должно быть именно так.

DrOffset, minGW.
То был сокращённый пример, вот здесь полный:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
        switch(parents[finish.x - xz + (finish.y - yz) * wz]){
        case (up):
            if(Map::isOutmapWithoutFlagWall(tileMap[finish.x][finish.y-1]) && Map::isFlagWall(tileMap[finish.x][finish.y-1]))
                break;
        case (down):
            if(Map::isOutmapWithoutFlagWall(tileMap[finish.x][finish.y+1]) && Map::isFlagWall(tileMap[finish.x][finish.y+1]))
                break;
        case left:
            if(Map::isOutmapWithoutFlagWall(tileMap[finish.x-1][finish.y]) && Map::isFlagWall(tileMap[finish.x-1][finish.y]))
                break;
        case right:
            if(Map::isOutmapWithoutFlagWall(tileMap[finish.x+1][finish.y]) && Map::isFlagWall(tileMap[finish.x+1][finish.y]))
                break;
            if((Map::isOutmapWithoutFlagWall(tileMap[finish.x-1][finish.y-1]) && Map::isFlagWall(tileMap[finish.x-1][finish.y-1]))
                || (Map::isOutmapWithoutFlagWall(tileMap[finish.x-1][finish.y+1]) && Map::isFlagWall(tileMap[finish.x-1][finish.y+1]))
                || (Map::isOutmapWithoutFlagWall(tileMap[finish.x+1][finish.y-1]) && Map::isFlagWall(tileMap[finish.x+1][finish.y-1]))
                || (Map::isOutmapWithoutFlagWall(tileMap[finish.x+1][finish.y+1]) && Map::isFlagWall(tileMap[finish.x+1][finish.y+1]))
            ){
                cost[finish.x - xz + (finish.y - yz) * wz] += 5;
                break;
            }
            cost[finish.x - xz + (finish.y - yz) * wz] += 10;
            break;
        case left|up:
            if(Map::isOutmapWithoutFlagWall(tileMap[finish.x-1][finish.y-1]) && Map::isFlagWall(tileMap[finish.x-1][finish.y-1]))
                break;
        case left|down:
            if(Map::isOutmapWithoutFlagWall(tileMap[finish.x-1][finish.y+1]) && Map::isFlagWall(tileMap[finish.x-1][finish.y+1]))
                break;
        case right|up:
            if(Map::isOutmapWithoutFlagWall(tileMap[finish.x+1][finish.y-1]) && Map::isFlagWall(tileMap[finish.x+1][finish.y-1]))
                break;
        case right|down:
            if(Map::isOutmapWithoutFlagWall(tileMap[finish.x+1][finish.y+1]) && Map::isFlagWall(tileMap[finish.x+1][finish.y+1]))
                break;
            if((Map::isOutmapWithoutFlagWall(tileMap[finish.x][finish.y-1]) && Map::isFlagWall(tileMap[finish.x][finish.y-1]))
                || (Map::isOutmapWithoutFlagWall(tileMap[finish.x][finish.y+1]) && Map::isFlagWall(tileMap[finish.x][finish.y+1]))
                || (Map::isOutmapWithoutFlagWall(tileMap[finish.x-1][finish.y]) && Map::isFlagWall(tileMap[finish.x-1][finish.y]))
                || (Map::isOutmapWithoutFlagWall(tileMap[finish.x+1][finish.y]) && Map::isFlagWall(tileMap[finish.x+1][finish.y]))
            ){
                cost[finish.x - xz + (finish.y - yz) * wz] += 5;
                break;
            }
            cost[finish.x - xz + (finish.y - yz) * wz] += 10;
            break;
        }

Кликните здесь для просмотра всего текста
0
 Аватар для Tordek
58 / 51 / 38
Регистрация: 22.01.2015
Сообщений: 176
25.01.2015, 21:58
Не знаю.. Попробуйте else goto case 10; тогда написать вместь предложеного мной break'а. Даже стало интересно, каким компилятором вы пользуетесь..
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
25.01.2015, 21:59
_20_, попробуй почитать книгу по C++, если не поможет - бросай изучение.
1
21 / 55 / 9
Регистрация: 29.09.2011
Сообщений: 617
25.01.2015, 22:14  [ТС]
Tordek, компилятор mniGW.

Добавлено через 13 минут
castaway, это Ваш стандартный ответ на все вопросы?
0
 Аватар для Tordek
58 / 51 / 38
Регистрация: 22.01.2015
Сообщений: 176
25.01.2015, 22:16
Цитата Сообщение от _20_ Посмотреть сообщение
компилятор mniGW.
Никогда не слышал.. Так как с goto, ругается всё ещё?
0
21 / 55 / 9
Регистрация: 29.09.2011
Сообщений: 617
25.01.2015, 22:18  [ТС]
Tordek, c goto ошибка dublicate case value

C++
1
2
        goto case down;
        case (down):
0
 Аватар для Tordek
58 / 51 / 38
Регистрация: 22.01.2015
Сообщений: 176
25.01.2015, 22:20
Гибельное дело, однако
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
25.01.2015, 22:21
Цитата Сообщение от _20_ Посмотреть сообщение
castaway, это Ваш стандартный ответ на все вопросы?
Нет.
Цитата Сообщение от _20_ Посмотреть сообщение
Как объяснить ему, что я знаю, что делаю?
Просто ты на самом деле не знаешь, что делаешь.
0
 Аватар для Tordek
58 / 51 / 38
Регистрация: 22.01.2015
Сообщений: 176
25.01.2015, 22:24
Тогда обьедените два кейса в один:
C++
1
2
3
4
5
case 0:case 10: if(point.x=0 && point.y >100) break;
else
if(point.y >50) break;
 std::cout << "+++"<< std::endl;
 break;
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.01.2015, 22:25
Цитата Сообщение от _20_ Посмотреть сообщение
Компилятор подчёркивает, мол не хватает break'а для "case 0:". Как объяснить ему, что я знаю, что делаю?
Компиляторы ничего не подчеркивают.

Подчеркивает ИДЕ.
Обычно это означает, что с кодом что-то не так.
Но не значит, что ошибка действительно имеет место быть.
Вполне возможно, что идешный интеллесенс устарел и не понимает новый синтаксис.

Конкретно в вашем случае:
C++
1
2
case 0:
  if(point.y >100) break;
Бряка по кейсу будет только если выполнится условие.
В противном случае начнется обработка следующего кейса.

Если это именно то, что вам и было нужно - значит все в порядке.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
25.01.2015, 22:26
_20_, текст предупреждения приведи пожалуйста. И точную версию компилятора.
Мне у себя твою проблему воспроизвести не удается пока.
Никаких дополнительных ключей для предупреждений не используешь? Ну кроме -Wall и -Wextra?
0
21 / 55 / 9
Регистрация: 29.09.2011
Сообщений: 617
25.01.2015, 22:38  [ТС]
hoggy, ИДЕ подчёркивает, только если компилятор ругается.
Подозреваю, что здесь что - то вроде

C++
1
2
3
4
5
6
int a = 0;
if(a = 5) 
 std::cout << "kkk" << std::endl;
 
if((a = 5))
 std::cout << "kkk" << std::endl;
Добавлено через 2 минуты
в первом случае будет предупреждение, во втором нет.
DrOffset, сейчс посмотрю.

Добавлено через 1 минуту
Текст предупреждения: No break at the end of case
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
25.01.2015, 22:41
Лучший ответ Сообщение было отмечено _20_ как решение

Решение

_20_, все ясно. В данном случае действительно пишет ide, а не компилятор. Это встроенный в eclipse статический анализатор срабатывает. Попробуй написать после case без break вот так:
C++
1
2
3
4
5
6
7
8
switch(point.x){
 case 0:
  if(point.y >100) break;
  //No break at the end of case
 case 10:
  if(point.y >50) break;
  break;
}
Или просто
C++
1
//no break
1
21 / 55 / 9
Регистрация: 29.09.2011
Сообщений: 617
25.01.2015, 22:44  [ТС]
Вот ключи:

Кликните здесь для просмотра всего текста

g++ -std=c++11 -I"J:\Programming\irrlicht-1.8.1\include" -I"J:\Programming\irrlicht-1.8.1\lib\Win32-gcc" -O0 -g3 -Wall -c -fmessage-length=0



Добавлено через 2 минуты
DrOffset, Спасибо, теперь всё в порядке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.01.2015, 22:44
Помогаю со студенческими работами здесь

Switch case внутри switch case
Привет всем! Нужна помощь. Пишу калькулятор с консольным меню. Так вот, используется цикл while, внутри которого у меня switch...

warning
помогите новичку, что за warning 16(comparison is always true due to limited range of data type) и как убрать? #include...

warning C4930
Дан следующий код на С++ class V {}; class A { public: A (const V &amp;v) {_v = v;} private:

warning strtok
Пишу в 10 студии: char* bla = strtok(&quot;bla bla bla&quot;, &quot; &quot;); Выдаёт варнинг: This function or variable may be unsafe. Consider using...

Warning C4715
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;math.h&gt; using namespace std; float max (float a, float...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru