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

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

Войти
Регистрация
Восстановить пароль
 
 
David_Ok
5 / 5 / 1
Регистрация: 12.01.2015
Сообщений: 87
#1

Как выйти из оператора if - C++

21.07.2015, 17:32. Просмотров 997. Ответов 22
Метки нет (Все метки)

Пишу ИИ для крестиков-ноликов и вопрос в том, если исполниться одино условие как сделать так что бы другие не проверялись? break чето в if'ие не пашет, есть какие-то другие варианты?

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
 //первый щаг, заканчивание игры с одного хода
    for(int i=0; i<3; i++)
    {
        if (cells[i*3]==cells[i*3+1] && cells[i*3+1]=='O' && cells[i*3+2]=='-')
            {cells[i*3+2]='O'; break;}
        if (cells[i*3+1]==cells[i*3+2] && cells[i*3+2]=='O' && cells[i*3]=='-')
            {cells[i*3]='O'; break;}
        if (cells[i*3]==cells[i*3+2] && cells[i*3+2]=='O' && cells[i*3+1]=='-')
            {cells[i*3+1]='O'; break;}
        if (cells[i+3]==cells[i+6] && cells[i+6]=='O' && cells[i]=='-')
            {cells[i]='O'; break;}
        if (cells[i]==cells[i+3] && cells[i+3]=='O' && cells[i+6]=='-')
            {cells[i+6]='O'; break;}
        if (cells[i]==cells[i+6] && cells[i+6]=='O' && cells[i+3]=='-')
            {cells[i+3]=='O'; break;}
        if (cells[4]==cells[8] && cells[8]=='O' && cells[0]=='-')
            {cells[0]='O'; break;}
        if (cells[0]==cells[4] && cells[4]=='O' && cells[8]=='-')
            {cells[8]='O'; break;}
        if (cells[0]==cells[8] && cells[8]=='O' && cells[4]=='-')
            {cells[4]='O'; break;}
        if (cells[6]==cells[4] && cells[4]=='O' && cells[2]=='-')
            {cells[2]='O'; break;}
        if (cells[4]==cells[2] && cells[2]=='O' &&  cells[6]=='-')
            {cells[6]='O'; break;}
        if (cells[2]==cells[6] && cells[6]=='O' && cells[4]=='-')
            {cells[4]='O'; break;}
//конец первого шага
   }
//зашита, противнику один ход до конца
    for(int i=0; i<3; i++)
    {
        if (cells[i*3]==cells[i*3+1] && cells[i*3+1]=='X' && cells[i*3+2]=='-')
            {cells[i*3+2]='O';break;}
        if (cells[i*3+1]==cells[i*3+2] && cells[i*3+2]=='X' && cells[i*3]=='-')
            {cells[i*3]='O';break;}
        if (cells[i*3]==cells[i*3+2] && cells[i*3+2]=='X' && cells[i*3+1]=='-')
            {cells[i*3+1]='O';break;}
        if (cells[i+3]==cells[i+6] && cells[i+6]=='X' && cells[i]=='-')
            {cells[i]='O';break;}
        if (cells[i]==cells[i+3] && cells[i+3]=='X' && cells[i+6]=='-')
            {cells[i+6]='O';break;}
        if (cells[i]==cells[i+6] && cells[i+6]=='X' && cells[i+3]=='-')
            {cells[i+3]=='O';break;}
    }
        if (cells[4]==cells[8] && cells[8]=='X' && cells[0]=='-')
            cells[0]='O';
        if (cells[0]==cells[4] && cells[4]=='X' && cells[8]=='-')
            cells[8]='O';
        if (cells[0]==cells[8] && cells[8]=='X' && cells[4]=='-')
            cells[4]='O';
        if (cells[6]==cells[4] && cells[4]=='X' && cells[2]=='-')
            cells[2]='O';
        if (cells[4]==cells[2] && cells[2]=='X' &&  cells[6]=='-')
            cells[6]='O';
        if (cells[2]==cells[6] && cells[6]=='X' && cells[4]=='-')
            cells[4]='O';
//конец второго щага
 
//третий щаг, выставление рандомно
    if (cells[4]=='-')
        cells[4]='O';
    if (cells[0]=='-')
        cells[0]='O';
    if (cells[1]=='-')
        cells[1]='O';
    if (cells[2]=='-')
        cells[2]='O';
    if (cells[5]=='-')
        cells[5]='O';
    if (cells[8]=='-')
        cells[8]='O';
    if (cells[7]=='-')
        cells[7]='O';
    if (cells[6]=='-')
        cells[6]='O';
    if (cells[3]=='-')
        cells[3]='O';
//конец третьего шага
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2015, 17:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как выйти из оператора if (C++):

Как выйти из цикла while(); - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;cctype&gt; #include &lt;string&gt; #include &lt;vector&gt; using namespace std; int main()...

Как выйти из условия if? - C++
Пользователю предлагается выбор, он должен ввести 1 или 2. Я хочу учесть и ситуацию, когда пользователь ошибся, и,чтобы не перезапускать...

как выйти из программы - C++
при выполнении программы - выполняется выбранная операция, после чего при нажатии любой кнопки цикл повторяется... вопрос: Что нужно...

do while - как выйти из цикла? - C++
Подскажите пожалуйста, а то я уже всю голову &quot;сломал&quot;, почему при вводе &quot;А&quot; цикл не прерывается??? #include &lt;iostream&gt; #include...

Как выйти из функции - C++
Прошу прощения. Произошел сбой при записи. Напишите еще раз суть задачи. То получилось что-то вроде рекурсии, постоянно вызывается этот...

Как выйти из программы - C++
Написав щось подібне калькулятору. Але що написати щоб вийти з консолі?? буду вдячний. І ще наприклад для повернення в голову...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
rikimaru2013
C++ Game Dev
2429 / 1123 / 240
Регистрация: 30.11.2013
Сообщений: 3,673
21.07.2015, 23:31 #16
Что это было?))))
Это даже кодом тяжело назвать)

Добавлено через 1 минуту
C++
1
2
3
4
5
// 2 вариант
bool func2(int a)
{
    return a != 1; 
}
Добавлено через 1 минуту
C++
1
2
3
4
5
// 1 вариант
bool func1(int a)
{
     return a == 1;
}
Добавлено через 1 минуту
Цитата Сообщение от David_Ok Посмотреть сообщение
какой и как, подскажите по-конкретнее
Сделайте все пункты, что здесь написаны / покажите сюда код, а с пунктами 2, 4, 6 - я вам помогу сам на месте же ж!
Krasiosoft
51 / 51 / 15
Регистрация: 01.06.2015
Сообщений: 189
22.07.2015, 01:38 #17
rikimaru2013, очень странно, что Вы не поняли, что это был просто пример, чтоб показать 2 варианта записи.

Да, я его сделал очень простым, но если вместо a++ будут другие преобразования, а вместо таких простых условий, будут более сложные, тогда как правильнее записывать? И самое главное, почему?
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
22.07.2015, 07:05 #18
Цитата Сообщение от Krasiosoft Посмотреть сообщение
Т.е. правильнее писать так:
Лично я считаю что да, так правильнее.
Цитата Сообщение от Krasiosoft Посмотреть сообщение
но как по мне, то читать проще второй вариант. А как большое количество return'ов будет усложнять поиск ошибок?
До поры до времени. Пример слишком прост. Функции могут быть намного больше и запутаннее. Когда знаешь, что выход из функции только один, становится намного проще её изучать.

Добавлено через 12 минут
Дополню ответ.
Встречал и подобную конструкцию:
C++
1
2
3
4
5
6
7
8
9
int foo() {
    int result = 0;
 
    ...
    много кода, который может изменять переменную result в зависимости от появления ошибок и т.п.
    ...
 
    return result;
}
Такой подход мне тоже сильно импонирует.
rikimaru2013
C++ Game Dev
2429 / 1123 / 240
Регистрация: 30.11.2013
Сообщений: 3,673
22.07.2015, 10:35 #19
Цитата Сообщение от castaway Посмотреть сообщение
Лично я считаю что да, так правильнее.
В том варианте 2 return, что уже неправильно. Как так, castaway, ? У вас есть доводы, что опревергают моё
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
А как вам моя рекомендация, что множественный return плох в плане отлова ошибки, чтения вашего кода и оптимизации компилятором ?
Моя рекомендация один и только один. Бывает и сам пишу 2 return, но противно в душе до ужаса, но в тех случаях более читабельно через два. А так только 1.

Цитата Сообщение от castaway Посмотреть сообщение
Такой подход мне тоже сильно импонирует.
Он и является для меня главным <3
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
22.07.2015, 10:54 #20
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
В том варианте 2 return, что уже неправильно. Как так, castaway, ? У вас есть доводы, что опревергают моё
"Я извиняюсь за свой английский", немного неправильно выразился. Слово "правильнее" было неправильным с моей стороны, просто отталкивался от вопроса ТС, содержащего его. Мне следовало бы заменить выражение "так правильнее" на "по-хорошему так, я считаю".
Моё мнение - 1 return для "сложных" функций, максимум - два оператора для простых, где оба видны с первого взгляда.
Avazart
Эксперт С++
7152 / 5329 / 278
Регистрация: 10.12.2010
Сообщений: 23,585
Записей в блоге: 17
22.07.2015, 14:08 #21

Не по теме:

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
В том варианте 2 return, что уже неправильно.
У меня тоже есть аргумент- ваша утверждение лабуда...


Несколько return-ов скорее упрощают код нежели усложняют его, а код все равно читается последовательно и весь.
rikimaru2013
22.07.2015, 14:37
  #22

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
Несколько return-ов скорее упрощают код нежели усложняют его, а код все равно читается последовательно и весь.
Я видел ваше высказывание поповоду
C++
1
void setValue(const int value);
Врядли мы одинаково мыслим - начиная уже с этого пункта)))

Avazart
22.07.2015, 14:53     Как выйти из оператора if
  #23

Не по теме:

А ну тогда да...

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

как выйти из циклов - C++
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #include &lt;Windows.h&gt; #include &lt;iostream&gt; void...

Не пойму как из цикла выйти - C++
в учебнике такой пример. #include &lt;stdio.h&gt; main() { long nc; nc = 0; while ( getchar() != EOF)

как полностью выйти из программы? - C++
есть программа, в которой цикл. необходимо, чтобы при определенном значении строки программа закрывалась. close(0), exit (0) не работает....

Как выйти из цикла? Не получается - C++
Есть задача: Из-за высокой цены бензина водители озабочены затратами топлива своих автомобилей. Один водитель взял в рейс несколько...


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

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

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