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

Прерывание цикла по условию - C++

Восстановить пароль Регистрация
 
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 38
04.05.2014, 16:52     Прерывание цикла по условию #1
Ребят,помогите пожалуйста,мне нужно,например если сработал первый if, то следующие не срабатывали в цикле,помогите пожалуйста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void proverka(string name, char p)
    {
        for (int i = 0; i < Width; i++)
        {
            for (int j = 0; j < Height; j++)
            {
                if (((Get(i, j) == p && Get(i, j + 1) == p && Get(i, j + 2) == p)) || ((Get(i, j) == p && Get(i, j - 1) == p && Get(i, j - 2) == p)) || ((Get(i, j) == p && Get(i + 1, j) == p && Get(i, j + 1) == p)))
                    cout << "Congratulations! " << name << " " << "Win" << endl;
                if ((Get(i, j) == p && Get(i - 1, j) == p && Get(i - 2, j) == p)) || ((Get(i, j) == p && Get(i + 1, j) == p && Get(i + 2, j) == p)) || ((Get(i, j) == p && Get(i + 1, j) == p && Get(i - 1, j) == p)))
                    cout << "Congratulations! " << name << " " << "Win" << endl;
                if ((Get(i, j) == p && Get(i - 1, j + 1) == p && Get(i - 2, j + 2) == p)) || ((Get(i, j) == p && Get(i + 1, j - 1) == p && Get(i + 2, j - 2) == p)) || ((Get(i, j) == p && Get(i - 1, j + 1) == p && Get(i + 1, j - 1) == p)))
                    cout << "Congratulations! " << name << " " << "Win" << endl;
                if ((Get(i, j) == p && Get(i - 1, j - 1) == p && Get(i - 2, j - 2) == p)) || ((Get(i, j) == p && Get(i + 1, j + 1) == p && Get(i + 2, j + 2) == p)) || ((Get(i, j) == p && Get(i - 1, j - 1) == p && Get(i + 1, j + 1) == p)))
                    cout << "Congratulations! " << name << " " << "Win" << endl;
    
            }
        }
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2014, 16:52     Прерывание цикла по условию
Посмотрите здесь:

C++ [C++] Прерывание цикла
Прерывание бесконечного цикла с возвратом значения нажатой клавиши в main() C++
вывод на экран чисел 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12, с использованием одного цикла и что бы все printf были только в теле цикла C++
Используя одну переменную цикла укажите возможные способы объявления заголовка счетного цикла. C++
Прерывание цикла! C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KOPOJI
Модератор
 Аватар для KOPOJI
16239 / 6450 / 389
Регистрация: 12.06.2012
Сообщений: 19,327
04.05.2014, 16:54     Прерывание цикла по условию #2
flag + break ?
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 38
04.05.2014, 16:56  [ТС]     Прерывание цикла по условию #3
у меня получается что if пересекаются,и 3 раза печатается cout

Добавлено через 35 секунд
если не сложно напишите в коде как должно быть)
KOPOJI
Модератор
 Аватар для KOPOJI
16239 / 6450 / 389
Регистрация: 12.06.2012
Сообщений: 19,327
04.05.2014, 17:02     Прерывание цикла по условию #4
В принципе, если лишние итерации не влияют, то можно и без break
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void proverka(string name, char p)
    {
      bool flag = false;
        for (int i = 0; i < Width; i++)
        {
            for (int j = 0; j < Height; j++)
            {
                if (((Get(i, j) == p && Get(i, j + 1) == p && Get(i, j + 2) == p)) || ((Get(i, j) == p && Get(i, j - 1) == p && Get(i, j - 2) == p)) || ((Get(i, j) == p && Get(i + 1, j) == p && Get(i, j + 1) == p)))
                    flag = true;
                if ((Get(i, j) == p && Get(i - 1, j) == p && Get(i - 2, j) == p)) || ((Get(i, j) == p && Get(i + 1, j) == p && Get(i + 2, j) == p)) || ((Get(i, j) == p && Get(i + 1, j) == p && Get(i - 1, j) == p)))
                    flag = true;
                if ((Get(i, j) == p && Get(i - 1, j + 1) == p && Get(i - 2, j + 2) == p)) || ((Get(i, j) == p && Get(i + 1, j - 1) == p && Get(i + 2, j - 2) == p)) || ((Get(i, j) == p && Get(i - 1, j + 1) == p && Get(i + 1, j - 1) == p)))
                    flag = true;
                if ((Get(i, j) == p && Get(i - 1, j - 1) == p && Get(i - 2, j - 2) == p)) || ((Get(i, j) == p && Get(i + 1, j + 1) == p && Get(i + 2, j + 2) == p)) || ((Get(i, j) == p && Get(i - 1, j - 1) == p && Get(i + 1, j + 1) == p)))
                    flag = true;
    
            }
        }
      if(flag)
        cout << "Congratulations! " << name << " " << "Win" << endl;
    }
Melg
416 / 152 / 62
Регистрация: 23.09.2013
Сообщений: 306
04.05.2014, 17:13     Прерывание цикла по условию #5
Вот ответ на Ваш вопрос. Кроме того, я считаю очень важным для Вас как для программиста научиться явно изъяснять свои мысли в коде, для того чтобы и Вы и другие программисты могли читать Ваш код как "Хорошо написанную прозу" © Uncle Bob.

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
47
48
49
50
51
bool IsFirstConditionalWin(int i, int j, char p) {
  return ((Get(i, j) == p && Get(i, j + 1) == p && Get(i, j + 2) == p)) ||
      ((Get(i, j) == p && Get(i, j - 1) == p && Get(i, j - 2) == p)) ||
      ((Get(i, j) == p && Get(i + 1, j) == p && Get(i, j + 1) == p));
}
 
bool IsSecondConditionalWin(i, j, char p) {
  return ((Get(i, j) == p && Get(i - 1, j) == p && Get(i - 2, j) == p)) ||
      ((Get(i, j) == p && Get(i + 1, j) == p && Get(i + 2, j) == p)) ||
      ((Get(i, j) == p && Get(i + 1, j) == p && Get(i - 1, j) == p));
}
 
bool IsThirdConditionalWin(int i, int j, char p) {
  return ((Get(i, j) == p && Get(i - 1, j + 1) == p && Get(i - 2, j + 2) == p)) ||
      ((Get(i, j) == p && Get(i + 1, j - 1) == p && Get(i + 2, j - 2) == p)) ||
      ((Get(i, j) == p && Get(i - 1, j + 1) == p && Get(i + 1, j - 1) == p));
}
 
bool IsFourthConditionalWin(int i, int j, char p) {
  return ((Get(i, j) == p && Get(i - 1, j - 1) == p && Get(i - 2, j - 2) == p)) ||
      ((Get(i, j) == p && Get(i + 1, j + 1) == p && Get(i + 2, j + 2) == p)) ||
      ((Get(i, j) == p && Get(i - 1, j - 1) == p && Get(i + 1, j + 1) == p));
}
 
bool IsWin(int i, int j, char p) {
  return IsFirstConditionalWin(i, j, p) ||
      IsSecondConditionalWin(i, j, p) ||
      IsThirdConditionalWin(i, j, p) ||
      IsFourthConditionalWin(i, j, p);
}
 
bool IsWin(char p) {
  for (int i = 0; i < Width; i++) {
      for (int j = 0; j < Height; j++) {
          if (IsWin(i, j, p)) {
              return true;
            }
        }
    }
  return false;
}
 
void ShowCongratulationsForPlayer(string player_name) {
  cout << "Congratulations! " << name << " " << "Win" << endl;
}
 
void ShowCongratulationsIfPlayerIsWin(string name, char p) {
  if (IsWin(p)) {
      ShowCongratulationsForPlayer(name);
    }
}
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 38
04.05.2014, 17:54  [ТС]     Прерывание цикла по условию #6
спасибо большое за помощь

Добавлено через 4 минуты
KOPOJI, можешь пожалуйста объяснить как это работает,я начинающий программист, не сразу все доходит)
KOPOJI
Модератор
 Аватар для KOPOJI
16239 / 6450 / 389
Регистрация: 12.06.2012
Сообщений: 19,327
04.05.2014, 19:52     Прерывание цикла по условию #7
Цитата Сообщение от kamish77777 Посмотреть сообщение
объяснить как это работает
как работает что именно "это" ?
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 38
04.05.2014, 20:37  [ТС]     Прерывание цикла по условию #8
ну этот flag,почему цикл по if дальше не скачет?как он так прерывает?
KOPOJI
Модератор
 Аватар для KOPOJI
16239 / 6450 / 389
Регистрация: 12.06.2012
Сообщений: 19,327
04.05.2014, 20:38     Прерывание цикла по условию #9
Цитата Сообщение от kamish77777 Посмотреть сообщение
почему цикл по if дальше не скачет?
а с чего вы взяли, что он дальше "не скачет" ? Скачет, стрекозел..
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 38
04.05.2014, 20:40  [ТС]     Прерывание цикла по условию #10
тогда я совсем ничего не понимаю))

Добавлено через 1 минуту
как тогда все заработало?)
KOPOJI
Модератор
 Аватар для KOPOJI
16239 / 6450 / 389
Регистрация: 12.06.2012
Сообщений: 19,327
04.05.2014, 20:42     Прерывание цикла по условию #11
А если так?

"Нашли" - Ложь
Если условие1 выполнилось, то "Нашли" = Истина
Если условие2 выполнилось, то "Нашли" также = Истина
Если условие3 выполнилось, то "Нашли" также = Истина
....
Если условия выше не выполнилось, "Нашли" - Ложь (исходное значение). Если любое из условий (или все сразу, или какая-то часть) выполнилось, то "Нашли" - Истина
...
Если "Нашли" - Истина, то выводим текст сообщения
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,043
04.05.2014, 20:47     Прерывание цикла по условию #12
Цитата Сообщение от kamish77777 Посмотреть сообщение
ебят,помогите пожалуйста,мне нужно,например если сработал первый if, то следующие не срабатывали в цикле,помогите пожалуйста
я не совсем понял что нужно?
если сработало условие не продолжать цикл?
тогда break или return сразу вышли из функции
а если чтобы продолжался цикл contine забросить последующий код и перейти к следующей итерации
а есть еще такая конструкция
C++
1
2
3
if()
else
 if()
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2014, 22:19     Прерывание цикла по условию
Еще ссылки по теме:

C++ Прерывание цикла и выполнение его вручную
Прерывание цикла, через клавишу Esc C++
C++ Нахождение отрицательного цикла в графе и вывод цикла

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

Или воспользуйтесь поиском по форуму:
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 38
04.05.2014, 22:19  [ТС]     Прерывание цикла по условию #13
Все,понял что к чему,спасибо огромное за помощь)
Yandex
Объявления
04.05.2014, 22:19     Прерывание цикла по условию
Ответ Создать тему
Опции темы

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