Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.66/35: Рейтинг темы: голосов - 35, средняя оценка - 4.66
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
1

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

18.07.2013, 15:33. Просмотров 7135. Ответов 19
Метки нет (Все метки)

почему break нельзя использовать в if

вот код
C++
1
2
3
4
if(f.eof()==1)
    {
        break;
    }
про break MVS говорит что
ОПЕРАТОР break можно исолпьзовтаь только внутри цикла
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2013, 15:33
Ответы с готовыми решениями:

Почему структуру нельзя использовать в классе?
#include <iostream> class editor_form { struct prop { int y; }; prop...

Почему нельзя использовать глобальные переменные
Здравствуйте, собственно вышел сиз данным вопросом в гугл и на стаке нашел такой ответ:...

Почему нельзя использовать метод ReadAllLines?
static int FoundConst(string fileAddress, string cs) { ...

Почему нельзя в функциях использовать типизированные указатели ?
Почему нельзя в функциях использовать типизированные указатели ? Напр почему так нельзя ? {$R...

19
3204 / 2015 / 346
Регистрация: 24.11.2012
Сообщений: 4,841
18.07.2013, 15:35 2
GoldDragon, и какой логиеский смысл ты вкладываешь в эту конструкцию?
0
Грамотный. Безпорно.
16852 / 9747 / 1878
Регистрация: 27.09.2012
Сообщений: 24,152
Записей в блоге: 2
18.07.2013, 15:35 3
Цитата Сообщение от GoldDragon Посмотреть сообщение
почему break нельзя использовать в if
а что он должен остановить по-вашему?
0
3284 / 2668 / 721
Регистрация: 25.03.2012
Сообщений: 9,622
Записей в блоге: 1
18.07.2013, 15:41 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 без всякого брейк!
  }
 
}
0
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
18.07.2013, 15:42  [ТС] 5
оепратор eof возвращает истину когда в файле, доходит до последнего символа, я делаю так если он дошел до конца то цикл прерывается, иначе index++, ой забыл вам написать

C++
1
2
3
4
5
if(f.eof()==1)
    {
        break;
    }
    else index++;
0
Почетный модератор
Эксперт С++
5836 / 2843 / 390
Регистрация: 01.11.2011
Сообщений: 6,881
18.07.2013, 15:49 6
Если бы вот это работало
C++
1
2
3
4
if(f.eof()==1)
    {
        break;
    }
тогда бы это было бесконечным циклом
C++
1
2
3
{
continue;
}
0
Jesus loves me
Эксперт С++
5106 / 3119 / 352
Регистрация: 12.12.2009
Сообщений: 7,890
Записей в блоге: 2
18.07.2013, 16:01 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 будет работать.
0
2572 / 2188 / 233
Регистрация: 03.07.2012
Сообщений: 7,896
Записей в блоге: 1
18.07.2013, 16:04 8
Цитата Сообщение от GoldDragon Посмотреть сообщение
оепратор eof возвращает истину когда в файле, доходит до последнего символа, я делаю так если он дошел до конца то цикл прерывается, иначе index++, ой забыл вам написать

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

Не по теме:

Tulosba, ну так

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

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

Не по теме:

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

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

Не по теме:

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

0
OhMyGodSoLong
18.07.2013, 22:44
  #15

Не по теме:

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

0
3284 / 2668 / 721
Регистрация: 25.03.2012
Сообщений: 9,622
Записей в блоге: 1
18.07.2013, 23:00 16
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Ну да. Это такой ограниченный goto. И if это тоже ограниченный goto, как и while, for, return и прочее. Важное отличие между ними и просто goto — структурность.
не знаю как в Яве, но в Сях break и continue рушат структурность в практически любой программе
0
Higher
1944 / 1210 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
19.07.2013, 00:35 17
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
не знаю как в Яве, но в Сях break и continue рушат структурность в практически любой программе
Парадигма такая - императивная. Вся программа - лишь набор состояний, и всякие break/continue/switch/goto/etc просто переключают состояние.
Функциональное программирование в этом плане более кошерно - в нем программа не имеет состояния вообще, и, как следствие, в фп отсутствуют break/continue/switch/goto/etc. Но это уже крайность. Никто не мешает мыслить функционально, использовать break/continue в качестве сахарка, но при этом не применять грязные императивные хаки.
0
Kastaneda
19.07.2013, 10:00
  #18

Не по теме:

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

0
Croessmah
19.07.2013, 10:03
  #19

Не по теме:

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

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

Не по теме:

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

0
20.07.2013, 21:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2013, 21:40
Привет! Вот еще темы с ответами:

Почему в сокращённой записи if нельзя использовать return
Здравствуйте. Решил воспользоваться сокращённой записью if. Например: int temp() { int a; ...

Почему для событий нельзя использовать оператор =?
Почему для событий нельзя использовать оператор =?

Почему в GUI нельзя использовать объект в main?
Делаю в конструкторе NetBeans, и проблема в том, что я не знаю, как использовать методы, ибо, ...

Почему нельзя использовать переменную из блока try/catch
Вечер добрый. import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser;...


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

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

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