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

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

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

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

21.07.2015, 17:32. Просмотров 1135. Ответов 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';
//конец третьего шага
0
Лучшие ответы (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++
Написав щось подібне калькулятору. Але що написати щоб вийти з консолі?? буду вдячний. І ще наприклад для повернення в голову...

22
Zazy
45 / 45 / 15
Регистрация: 14.04.2013
Сообщений: 186
21.07.2015, 17:44 #2
C++
1
2
3
if(cells[i*3]==cells[i*3+1] && cells[i*3+1]=='O' && cells[i*3+2]=='-')
else if(cells[i*3+1]==cells[i*3+2] && cells[i*3+2]=='O' && cells[i*3]=='-')
else if()
и так далее...
2
D_Gon
24 / 13 / 5
Регистрация: 09.07.2015
Сообщений: 47
21.07.2015, 17:45 #3
C++
1
2
3
4
 if (cells[i*3]==cells[i*3+1] && cells[i*3+1]=='O' && cells[i*3+2]=='-')
            cells[i*3+2]='O';
        else if (cells[i*3+1]==cells[i*3+2] && cells[i*3+2]=='O' && cells[i*3]=='-')
            cells[i*3]='O';
1
rikimaru2013
C++ Game Dev
2439 / 1133 / 240
Регистрация: 30.11.2013
Сообщений: 3,690
21.07.2015, 18:00 #4
1) Храните двухмерный массив
2) Используйте цикл
3) храните в массиве числа -1, 0, 1. Отсюда победа это если сумма ряда или -3 или 3, где кто выигрывает думаю понятно, так же про диагональ и про вертикаль.
4) Используйте цикл
5) Используйте константную char переменную для хранения символа вывода на экран "фишки игрока"
6) используйте уже наконечно циклы!
2
David_Ok
5 / 5 / 1
Регистрация: 12.01.2015
Сообщений: 87
21.07.2015, 18:19  [ТС] #5
Ребят сейчас сделал как говорите и все равно же не помогает, потому что есть цикл 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
//первый щаг, заканчивание игры с одного хода
    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;}
       else if (cells[i*3+1]==cells[i*3+2] && cells[i*3+2]=='O' && cells[i*3]=='-')
            {cells[i*3]='O'; break;}
       else if (cells[i*3]==cells[i*3+2] && cells[i*3+2]=='O' && cells[i*3+1]=='-')
            {cells[i*3+1]='O'; break;}
       else if (cells[i+3]==cells[i+6] && cells[i+6]=='O' && cells[i]=='-')
            {cells[i]='O'; break;}
       else if (cells[i]==cells[i+3] && cells[i+3]=='O' && cells[i+6]=='-')
            {cells[i+6]='O'; break;}
       else if (cells[i]==cells[i+6] && cells[i+6]=='O' && cells[i+3]=='-')
            {cells[i+3]=='O'; break;}
       else if (cells[4]==cells[8] && cells[8]=='O' && cells[0]=='-')
            {cells[0]='O'; break;}
       else if (cells[0]==cells[4] && cells[4]=='O' && cells[8]=='-')
            {cells[8]='O'; break;}
       else if (cells[0]==cells[8] && cells[8]=='O' && cells[4]=='-')
            {cells[4]='O'; break;}
       else if (cells[6]==cells[4] && cells[4]=='O' && cells[2]=='-')
            {cells[2]='O'; break;}
       else if (cells[4]==cells[2] && cells[2]=='O' &&  cells[6]=='-')
            {cells[6]='O'; break;}
       else if (cells[2]==cells[6] && cells[6]=='O' && cells[4]=='-')
            {cells[4]='O'; break;}
//конец первого шага
 
//зашита, противнику один ход до конца
       else if (cells[i*3]==cells[i*3+1] && cells[i*3+1]=='X' && cells[i*3+2]=='-')
            {cells[i*3+2]='O';break;}
       else if (cells[i*3+1]==cells[i*3+2] && cells[i*3+2]=='X' && cells[i*3]=='-')
            {cells[i*3]='O';break;}
       else if (cells[i*3]==cells[i*3+2] && cells[i*3+2]=='X' && cells[i*3+1]=='-')
            {cells[i*3+1]='O';break;}
       else if (cells[i+3]==cells[i+6] && cells[i+6]=='X' && cells[i]=='-')
            {cells[i]='O';break;}
       else if (cells[i]==cells[i+3] && cells[i+3]=='X' && cells[i+6]=='-')
            {cells[i+6]='O';break;}
       else if (cells[i]==cells[i+6] && cells[i+6]=='X' && cells[i+3]=='-')
            {cells[i+3]=='O';break;}
       else if (cells[4]==cells[8] && cells[8]=='X' && cells[0]=='-')
            {cells[0]='O';break;}
       else if (cells[0]==cells[4] && cells[4]=='X' && cells[8]=='-')
            {cells[8]='O';break;}
       else if (cells[0]==cells[8] && cells[8]=='X' && cells[4]=='-')
            {cells[4]='O';break;}
       else if (cells[6]==cells[4] && cells[4]=='X' && cells[2]=='-')
            {cells[2]='O';break;}
       else if (cells[4]==cells[2] && cells[2]=='X' &&  cells[6]=='-')
            {cells[6]='O';break;}
       else if (cells[2]==cells[6] && cells[6]=='X' && cells[4]=='-')
            {cells[4]='O';break;}
    }
//конец второго щага
 
//третий щаг, выставление рандомно
    if (cells[4]=='-')
        cells[4]='O';
   else if (cells[0]=='-')
        cells[0]='O';
   else if (cells[1]=='-')
        cells[1]='O';
   else if (cells[2]=='-')
        cells[2]='O';
   else if (cells[5]=='-')
        cells[5]='O';
   else if (cells[8]=='-')
        cells[8]='O';
   else if (cells[7]=='-')
        cells[7]='O';
   else if (cells[6]=='-')
        cells[6]='O';
   else if (cells[3]=='-')
        cells[3]='O';
//конец третьего шага
       }
Последний if всегда будет исполняться

Добавлено через 16 минут
Ребят, кто-то может помочь ?
0
D_Gon
24 / 13 / 5
Регистрация: 09.07.2015
Сообщений: 47
21.07.2015, 18:21 #6
нет не всегда
0
David_Ok
5 / 5 / 1
Регистрация: 12.01.2015
Сообщений: 87
21.07.2015, 18:24  [ТС] #7
Цитата Сообщение от D_Gon Посмотреть сообщение
нет не всегда
Ну даже если не всегда это же не играет роли.... Должно же исполняться только раз и все... Пробую разные штуки и пока что глухо
0
rikimaru2013
C++ Game Dev
2439 / 1133 / 240
Регистрация: 30.11.2013
Сообщений: 3,690
21.07.2015, 18:43 #8
Цитата Сообщение от David_Ok Посмотреть сообщение
Пробую разные штуки и пока что глухо
попробуйте цикл ...................................
0
Excalibur921
674 / 382 / 59
Регистрация: 12.10.2013
Сообщений: 2,643
21.07.2015, 20:10 #9
Как много If.Гляньте еще Switch Case.
0
Avazart
21.07.2015, 20:17
  #10

Не по теме:

C++
1
2
3
4
5
6
7
     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]=='-')
cut
Используйте функции, классы, перечисления, switch/case ... да и вообще язык С++ наконец ....
cut

0
Excalibur921
674 / 382 / 59
Регистрация: 12.10.2013
Сообщений: 2,643
21.07.2015, 20:22 #11
Цитата Сообщение от David_Ok Посмотреть сообщение
Пробую разные штуки и пока что глухо
Как много у вас условий сразу. Никогда не начинайте сразу чистовой сложный код. Нужно писать постепенно усложняя программу с записью версий где нить например в MS Word и номер версии кода. Используйте вывод отладочной инфы чтобы проверять как на самом деле работают ваши условия.
Или например выводить вам типа:
Найдено возможных ходов 4.
Возможная победа на ходов:2
Просчитано ходов вперед:2.
Также можно например рисовать букву или символ или цветную точку на экране где комп предполагает ход игрока. Также есть куча примеров в инете на С++ вы погуглили вопрос?
Хорошие программисты стараются максимально изучить вопрос а затем пробовать самому. Или вам интересно вообще самому с нуля сделать?
1
Krasiosoft
51 / 51 / 15
Регистрация: 01.06.2015
Сообщений: 189
21.07.2015, 21:03 #12
Цитата Сообщение от David_Ok Посмотреть сообщение
Должно же исполняться только раз и все
Если запутались в if'ах, сделайте это в виде функции и делайте return в нужном Вам месте выхода.
1
rikimaru2013
C++ Game Dev
2439 / 1133 / 240
Регистрация: 30.11.2013
Сообщений: 3,690
21.07.2015, 21:28 #13
Цитата Сообщение от Krasiosoft Посмотреть сообщение
Если запутались в if'ах, сделайте это в виде функции и делайте return в нужном Вам месте выхода.
А как вам моя рекомендация, что множественный return плох в плане отлова ошибки, чтения вашего кода и оптимизации компилятором ?
0
David_Ok
5 / 5 / 1
Регистрация: 12.01.2015
Сообщений: 87
21.07.2015, 23:02  [ТС] #14
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
попробуйте цикл ...................................
какой и как, подскажите по-конкретнее
0
Krasiosoft
51 / 51 / 15
Регистрация: 01.06.2015
Сообщений: 189
21.07.2015, 23:12 #15
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
множественный return плох
Т.е. правильнее писать так:
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
bool func1(int a){
 
    if(a==1){
        a++;
        if(a==2){
            a++;
            if(a==3){
                a++;
                if(a==4){
                    a++;
                    if(a==5){
                        a++;
                        if(a==6){
                            a++;
                            if(a==7){
                                a++;
                                if(a==8){
                                    a++;
                                    if(a==9){
                                        a++;
                                        if(a==10){
                                            return true;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
 
    return false;
}
Чем так:
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
bool func2(int a){
 
    if(a!=1) return false;
    a++;
    if(a!=2) return false;
    a++;
    if(a!=3) return false;
    a++;
    if(a!=4) return false;
    a++;
    if(a!=5) return false;
    a++;
    if(a!=6) return false;
    a++;
    if(a!=7) return false;
    a++;
    if(a!=8) return false;
    a++;
    if(a!=9) return false;
    a++;
    if(a!=10) return false;
 
    return true;
}
Не знаю за какими алгоритмами работает оптимизация компилятора, но как по мне, то читать проще второй вариант. А как большое количество return'ов будет усложнять поиск ошибок?
1
21.07.2015, 23:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2015, 23:12
Привет! Вот еще темы с ответами:

как выйти из циклов - 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++
Есть задача: Из-за высокой цены бензина водители озабочены затратами топлива своих автомобилей. Один водитель взял в рейс несколько...


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

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

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