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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,174
Записей в блоге: 1
#1

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

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

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

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

Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен? - C++
То есть честно говоря, вопрос так надо ставить: почему если конструктор встроенный, то можно использовать параметр (по умолчанию) шаблона...

Почему нельзя использовать в операторе case переменные, которые определены как #define - C++
Я не понимаю, почему Visual Studio ругается на строку с case в коде. Вроде все правильно. Если там написать напрямую цифру, тогда все...

Почему в выражении нельзя использовать запятую вместо && - C++
Привет всем, у меня такой вопрос: Почему в выражении for (i=0; i < *k && strcmp((base+i)->fam,fam); i++); вместо "&&"...

Программа для выполнения:При вводе цифры от 0 до 9 будет выводиться ее название. Использовать оператор break - C++
Помогите пожалуйста заменить в программе оператор goto на оператор break #include <iostream> using namespace std; const char...

Использована неинициализированая переменная (использовать <string> нельзя) - C++
#include &lt;fstream&gt; #include &lt;iostream&gt; //#include &lt;map&gt; //#include &lt;string&gt; using namespace std; struct map { char *key; ...

Почему нельзя подставлять переменные в выражения #if #else? - C++
Почему код работает, не должен же, потому что выражение стоящее после #if вычисляется на этапе компиляции, переменные подставлять нельзя?? ...

19
0x10
2465 / 1637 / 241
Регистрация: 24.11.2012
Сообщений: 4,041
18.07.2013, 15:35 #2
GoldDragon, и какой логиеский смысл ты вкладываешь в эту конструкцию?
0
Croessmah
Эксперт CЭксперт С++
13423 / 7577 / 855
Регистрация: 27.09.2012
Сообщений: 18,663
Записей в блоге: 3
Завершенные тесты: 1
18.07.2013, 15:35 #3
Цитата Сообщение от GoldDragon Посмотреть сообщение
почему break нельзя использовать в if
а что он должен остановить по-вашему?
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 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
xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,174
Записей в блоге: 1
18.07.2013, 15:42  [ТС] #5
оепратор eof возвращает истину когда в файле, доходит до последнего символа, я делаю так если он дошел до конца то цикл прерывается, иначе index++, ой забыл вам написать

C++
1
2
3
4
5
if(f.eof()==1)
    {
        break;
    }
    else index++;
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,530
Завершенные тесты: 1
18.07.2013, 15:49 #6
Если бы вот это работало
C++
1
2
3
4
if(f.eof()==1)
    {
        break;
    }
тогда бы это было бесконечным циклом
C++
1
2
3
{
continue;
}
0
Kastaneda
Форумчанин
Эксперт С++
4656 / 2864 / 228
Регистрация: 12.12.2009
Сообщений: 7,276
Записей в блоге: 2
Завершенные тесты: 1
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
zer0mail
2344 / 1974 / 193
Регистрация: 03.07.2012
Сообщений: 7,095
Записей в блоге: 1
18.07.2013, 16:04 #8
Цитата Сообщение от GoldDragon Посмотреть сообщение
оепратор eof возвращает истину когда в файле, доходит до последнего символа, я делаю так если он дошел до конца то цикл прерывается, иначе index++, ой забыл вам написать

C++
1
2
3
4
5
if(f.eof()==1)
    {
        break;
    }
    else index++;
Обсуждать надо то, что написано, а не то, что за кадром или в мыслях. Здесь никакого цикла нет.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
diagon
Higher
1929 / 1195 / 49
Регистрация: 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
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 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     Почему break нельзя использовать в if?
  #15

Не по теме:

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

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

Почему в switch нельзя определять переменные? - C++
int main() { setlocale(LC_ALL, &quot;Russian&quot;); int n; std::cout &lt;&lt; &quot;Введите число: &quot;; std::cin &gt;&gt; n; switch...

Почему таким способом нельзя создать массив? - C++
Хочу создать массив вот таким способом, но выскакивает ошибка error C2057: требуется константное выражение. Ведь у меня и так константа!?...

Почему нельзя выделить статически кусок в ~100 MB? - C++
Есть код #include &lt;iostream&gt; using namespace std; enum { length = 256, count = 50 }; struct Town { char name =...

Почему нельзя так объявить двумерный массив? - C++
Ошибка возникает если для массива tempArray при объявлении(и одновременной инициализации) использовать переменную(size) которую принимает...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.07.2013, 22:44
Ответ Создать тему
Опции темы

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