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

Почему break нельзя использовать в if? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
xTIGRx
 Аватар для xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,169
Записей в блоге: 1
18.07.2013, 15:33     Почему break нельзя использовать в if? #1
почему break нельзя использовать в if

вот код
C++
1
2
3
4
if(f.eof()==1)
    {
        break;
    }
про break MVS говорит что
ОПЕРАТОР break можно исолпьзовтаь только внутри цикла
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2013, 15:33     Почему break нельзя использовать в if?
Посмотрите здесь:

C++ Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен?
C++ Почему нельзя компилировать отдельный заголовочный файл?
Почему нельзя использовать в операторе case переменные, которые определены как #define C++
C++ Почему нельзя так объявить двумерный массив?
C++ Почему в switch нельзя определять переменные?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
18.07.2013, 15:35     Почему break нельзя использовать в if? #2
GoldDragon, и какой логиеский смысл ты вкладываешь в эту конструкцию?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11827 / 6806 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
18.07.2013, 15:35     Почему break нельзя использовать в if? #3
Цитата Сообщение от GoldDragon Посмотреть сообщение
почему break нельзя использовать в if
а что он должен остановить по-вашему?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
18.07.2013, 15:41     Почему break нельзя использовать в if? #4
А какой смысл ты вкладываешь в break при отсутствии цикла?
C++
1
2
3
4
5
6
7
8
while (цикл){
 
  if(хватит){
    break;//вот логичная конструкция
    //Завершает цикл по условию
  }
 //иначе всё повторится
}
А какой смысл завершать что-то при отсутствии этого самого цикла?
C++
1
2
3
4
5
6
7
int main(){
  if (хватит){
    break;//Что брейк? Куда брейк? Мы где-то разве застряли?
         // Мы и так ща перейдём к строке 6 без всякого брейк!
  }
 
}
xTIGRx
 Аватар для xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,169
Записей в блоге: 1
18.07.2013, 15:42  [ТС]     Почему break нельзя использовать в if? #5
оепратор eof возвращает истину когда в файле, доходит до последнего символа, я делаю так если он дошел до конца то цикл прерывается, иначе index++, ой забыл вам написать

C++
1
2
3
4
5
if(f.eof()==1)
    {
        break;
    }
    else index++;
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
18.07.2013, 15:49     Почему break нельзя использовать в if? #6
Если бы вот это работало
C++
1
2
3
4
if(f.eof()==1)
    {
        break;
    }
тогда бы это было бесконечным циклом
C++
1
2
3
{
continue;
}
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
18.07.2013, 16:01     Почему break нельзя использовать в if? #7
Цитата Сообщение от GoldDragon Посмотреть сообщение
оепратор eof возвращает истину когда в файле, доходит до последнего символа, я делаю так если он дошел до конца то цикл прерывается, иначе index++, ой забыл вам написать

C++
1
2
3
4
5
if(f.eof()==1)
    {
        break;
    }
    else index++;
C++
1
2
3
if (!f.eof()) {
    index++;
}
не судьба?

Добавлено через 1 минуту
Цитата Сообщение от GoldDragon Посмотреть сообщение
то цикл прерывается
А. так дело в цикле происходит? Тогда break будет работать.
zer0mail
2185 / 1868 / 187
Регистрация: 03.07.2012
Сообщений: 6,642
Записей в блоге: 1
18.07.2013, 16:04     Почему break нельзя использовать в if? #8
Цитата Сообщение от GoldDragon Посмотреть сообщение
оепратор eof возвращает истину когда в файле, доходит до последнего символа, я делаю так если он дошел до конца то цикл прерывается, иначе index++, ой забыл вам написать

C++
1
2
3
4
5
if(f.eof()==1)
    {
        break;
    }
    else index++;
Обсуждать надо то, что написано, а не то, что за кадром или в мыслях. Здесь никакого цикла нет.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
18.07.2013, 16:06     Почему break нельзя использовать в if? #9
Цитата Сообщение от 0x10 Посмотреть сообщение
и какой логиеский смысл ты вкладываешь в эту конструкцию?
Цитата Сообщение от Croessmah Посмотреть сообщение
а что он должен остановить по-вашему?
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А какой смысл ты вкладываешь в break при отсутствии цикла?
Может ТС нужен просто goto? и unreachable code как следствие
Croessmah
18.07.2013, 16:07
  #10

Не по теме:

Tulosba, ну так

Цитата Сообщение от Tulosba Посмотреть сообщение
Может ТС нужен
телепатией не особо хочется заниматься

diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
18.07.2013, 16:21     Почему break нельзя использовать в if? #11
Потому что тогда появляется неоднозначность
C++
1
2
3
4
5
6
7
8
9
while (true)
{
    std::cin >> value;
    if (value == 0) 
    {
       ... 
       break; //к чему относится break?
    }
}
Точнее, все получается достаточно однозначно (прерывается всегда текущий блок), но некрасиво (так просто break'нуться из цикла уже не получится).
Tulosba
18.07.2013, 16:22
  #12

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
телепатией не особо хочется заниматься
иногда, "телепатией" может оказаться просто опыт.

OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
18.07.2013, 21:53     Почему break нельзя использовать в if? #13
Цитата Сообщение от diagon Посмотреть сообщение
но некрасиво (так просто break'нуться из цикла уже не получится).
Эта проблема решается с помощью named break как в той же Джаве.
Kastaneda
18.07.2013, 22:10
  #14

Не по теме:

Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
named break как в той же Джаве.
Не силен в Java, но по моему разарботчикам просто было стремно сделать оператор goto и они назвали его named break.

OhMyGodSoLong
18.07.2013, 22:44
  #15

Не по теме:

Ну да. Это такой ограниченный goto. И if это тоже ограниченный goto, как и while, for, return и прочее. Важное отличие между ними и просто goto — структурность.

Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
18.07.2013, 23:00     Почему break нельзя использовать в if? #16
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Ну да. Это такой ограниченный goto. И if это тоже ограниченный goto, как и while, for, return и прочее. Важное отличие между ними и просто goto — структурность.
не знаю как в Яве, но в Сях break и continue рушат структурность в практически любой программе
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
19.07.2013, 00:35     Почему break нельзя использовать в if? #17
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
не знаю как в Яве, но в Сях break и continue рушат структурность в практически любой программе
Парадигма такая - императивная. Вся программа - лишь набор состояний, и всякие break/continue/switch/goto/etc просто переключают состояние.
Функциональное программирование в этом плане более кошерно - в нем программа не имеет состояния вообще, и, как следствие, в фп отсутствуют break/continue/switch/goto/etc. Но это уже крайность. Никто не мешает мыслить функционально, использовать break/continue в качестве сахарка, но при этом не применять грязные императивные хаки.
Kastaneda
19.07.2013, 10:00
  #18

Не по теме:

Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Важное отличие между ними и просто goto — структурность.
Ну не знаю, я не вижу разницы между goto label; и break label;, кроме ограниченной области применения.

Croessmah
19.07.2013, 10:03
  #19

Не по теме:

Цитата Сообщение от Kastaneda Посмотреть сообщение
Ну не знаю, я не вижу разницы между goto label; и break label;, кроме ограниченной области применения.
Ну да, переименовать милицию goto label в полицию break label и прям всё изменится

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2013, 21:40     Почему break нельзя использовать в if?
Еще ссылки по теме:

Почему нельзя подставлять переменные в выражения #if #else? C++
Программа для выполнения:При вводе цифры от 0 до 9 будет выводиться ее название. Использовать оператор break C++
C++ Почему два char нельзя сравнивать так ==?

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

Или воспользуйтесь поиском по форуму:
zer0mail
20.07.2013, 21:40     Почему break нельзя использовать в if?
  #20

Не по теме:

Помню, на ассеблере никаких for, while, do, switch... Сплошные if и goto

Yandex
Объявления
20.07.2013, 21:40     Почему break нельзя использовать в if?
Ответ Создать тему
Опции темы

Текущее время: 19:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru