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

Как через goto вернуться назад, чтоб еще раз проверить функцию? - C++

Восстановить пароль Регистрация
 
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 38
27.04.2014, 17:26     Как через goto вернуться назад, чтоб еще раз проверить функцию? #1
ребят,подскажите пожалуйста,как мне через goto вернуться назад,чтоб еше раз проверить мою функцию?


C++
1
2
3
4
5
6
7
8
9
      if (A.check(t, t1))
                {
                    cout << "Введите новые координаты" << endl << endl;
                    cout << "Введите i" << endl << endl;
                    cin >> t;
                    cout << "Введите j" << endl << endl;
                    cin >> t1;
                    A.filling(t, t1, 'X');
                    goto??????????
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
27.04.2014, 17:30     Как через goto вернуться назад, чтоб еще раз проверить функцию? #2
if можно заменить на while, и не использовать goto.
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 38
27.04.2014, 17:49  [ТС]     Как через goto вернуться назад, чтоб еще раз проверить функцию? #3
нет,через while не получится,мне нужно goto.
C++
1
2
3
4
5
6
7
8
9
10
11
12
if (A.check(t, t1))
                {
                    cout << "Введите новые координаты" << endl << endl;
                    cout << "Введите i" << endl << endl;
                    cin >> t;
                    cout << "Введите j" << endl << endl;
                    cin >> t1;
                    A.filling(t, t1, 'X');
                    goto |;
                }
                else
                    A.filling(t, t1, 'X');
Добавлено через 14 минут
Ребят,помогите пожалуйста,очень нужно)
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
27.04.2014, 17:55     Как через goto вернуться назад, чтоб еще раз проверить функцию? #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
label:
if (A.check(t, t1))
                {
                    cout << "Введите новые координаты" << endl << endl;
                    cout << "Введите i" << endl << endl;
                    cin >> t;
                    cout << "Введите j" << endl << endl;
                    cin >> t1;
                    A.filling(t, t1, 'X');
                    goto label;
                }
                else
                    A.filling(t, t1, 'X');
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 38
27.04.2014, 17:59  [ТС]     Как через goto вернуться назад, чтоб еще раз проверить функцию? #5
Спасибо большое))
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
27.04.2014, 18:10     Как через goto вернуться назад, чтоб еще раз проверить функцию? #6
Перфекционист во мне не может смириться: чем while-то не угодил?
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 38
27.04.2014, 18:20  [ТС]     Как через goto вернуться назад, чтоб еще раз проверить функцию? #7
ну у меня ,короче чем объяснять,лучше код скинуть)))
// +0.cpp: определяет точку входа для консольного приложения.
//
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include "stdafx.h"
#include "iostream"
#include "time.h"
#include "string"
#include "vector"
using namespace std;
 
class  Matrix
{
private:
    int Width; // длинна
    int Height; //ширина
    char *Body;  // тело матрицы
public:
    Matrix(int w, int h)
    {
        Width = w;
        Height = h;
        Body = new char[w * h];
    }
    ~Matrix()
    {
        delete[] Body;
    }
    //добавляет в массив знчение value
    void Set(int col, int row, char value)
    {
        Body[col * Width + row] = value;
    }
    // достает то что нужно из матрицы
    char Get(int col, int row)
    {
        return Body[col * Width + row];
    }
    // заполняет матрицу единицами
    void SetRand()
    {
        for (int i = 0; i < Width; i++)
        {
            for (int j = 0; j < Height; j++)
            {
                Set(i, j, '.');
            }
        }
    }
    // выводит матрицу на экран
    void Print()
    {
        for (int i = 0; i < Width; i++)
        {
            for (int j = 0; j < Height; j++)
            {
                cout << Get(i, j) << "    ";
            }
            cout << endl;
            cout << endl;
        }
    }
    // заполняет матрицу
    void filling(int t, int t1, char n)
    {
        //check(t, t1);
        Set(t, t1, n);
        system("cls");
        Print();
    }
    bool check(int t, int t1)
    {
        
        if ((Get(t, t1) == 'X') || (Get(t, t1)) == 'O')
        return true;
        else return false;
    }
    
    
};
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    Matrix A(3,3);
    A.SetRand();
    string name1; //имя первого игрока
    string name2; // имя вторго игрока
    cout << "Введите имя первого игрока" << endl << endl;
        cin >> name1;
        cout << endl;
        cout << "Введите имя вторго игрока" << endl << endl;
        cin >> name2;
        cout << endl;
        system("cls");
        int t, t1;
        char n;
        A.Print();
    for (int i = 0; i < 9; i++)
    {
        if (i % 2 == 0)
        {
            
            cout << "Ходит" << "   " << name1 << " " << endl << endl;
            cout << "Введите i" << endl << endl;
            cin >> t;
            cout << "Введите j" << endl << endl;
            cin >> t1;
            if (A.check(t, t1))
                {
                    cout <<name1 << " "<< "Введите новые координаты" << endl << endl;
                    cout << "Введите i" << endl << endl;
                    cin >> t;
                    cout << "Введите j" << endl << endl;
                    cin >> t1;
                    A.filling(t, t1, 'X');
                }
                else
                    A.filling(t, t1, 'X');
            }
        if (i % 2 != 0)
        {
    
            cout << "Ходит" << "   " << name2 << " " << endl << endl;
            cout << "Введите i" << endl << endl;
            cin >> t;
            cout << "Введите j" << endl << endl;
            cin >> t1;
            if (A.check(t, t1))
                {
                    cout << name2<<" "<<"Введите новые координаты" << endl << endl;
                    cout << "Введите i" << endl << endl;
                    cin >> t;
                    cout << "Введите j" << endl << endl;
                    cin >> t1;
                    A.filling(t, t1, 'O');
            
                }
                else
                    A.filling(t, t1, 'O');
        }
        
}
    system("PAUSE");
    return 0;
}
Добавлено через 3 минуты
я пробую писать крестики нолики,ходит крестик,когда ходит нолик,нам нужно глянуть,нет ли в той ячейке которую мы выбрали крестика,если есть то запрашивает новые координаты,так вот,эти же координаты можно несколько раз не верно ввести,поэтому перед if думал использовать goto,только что то не работает(
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
27.04.2014, 18:21     Как через goto вернуться назад, чтоб еще раз проверить функцию? #8
Сходу вижу повторяющийся код: строки с 99 по 114 и с 119 по 135 - вынести в отдельную функцию.
В остальное не вчитывался.
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 38
27.04.2014, 18:24  [ТС]     Как через goto вернуться назад, чтоб еще раз проверить функцию? #9
когда ввожу один раз новые координаты ставится нолик,а когда пару раз,все в нолики превращается(

Добавлено через 16 секунд
даже там где были крестики

Добавлено через 2 минуты
так дело не в красоте,а в том что не робит так как надо(
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
27.04.2014, 18:43     Как через goto вернуться назад, чтоб еще раз проверить функцию? #10
А я не про красивости, а про то, что невозможно поддерживать код с копипастой.
Подавил в себе желание переписать все с нуля, подправил только ввод. Остальные баги не исправлял - там еще выход за границы не проверяется.
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include <iostream>
#include <time.h>
#include <string>
#include <vector>
 
#include <cstdlib>
using namespace std;
 
class  Matrix
{
private:
    int Width; // длинна
    int Height; //ширина
    char* Body;  // тело матрицы
public:
    Matrix(int w, int h)
    {
        Width = w;
        Height = h;
        Body = new char[w * h];
    }
    ~Matrix()
    {
        delete[] Body;
    }
    //добавляет в массив знчение value
    void Set(int col, int row, char value)
    {
        Body[col * Width + row] = value;
    }
    // достает то что нужно из матрицы
    char Get(int col, int row)
    {
        return Body[col * Width + row];
    }
    // заполняет матрицу единицами
    void SetRand()
    {
        for (int i = 0; i < Width; i++)
        {
            for (int j = 0; j < Height; j++)
            {
                Set(i, j, '.');
            }
        }
    }
    // выводит матрицу на экран
    void Print()
    {
        for (int i = 0; i < Width; i++)
        {
            for (int j = 0; j < Height; j++)
            {
                cout << Get(i, j) << "    ";
            }
 
            cout << endl;
            cout << endl;
        }
    }
    // заполняет матрицу
    void filling(int t, int t1, char n)
    {
        //check(t, t1);
        Set(t, t1, n);
        system("clear");
        Print();
    }
    bool check(int t, int t1)
    {
 
        if ((Get(t, t1) == 'X') || (Get(t, t1)) == 'O')
        {
            return true;
        }
 
        else
        {
            return false;
        }
    }
 
 
};
 
void read_coordinates(int& t, int& t1)
{
    cout << "Введите i" << endl << endl;
    cin >> t;
    cout << "Введите j" << endl << endl;
    cin >> t1;
}
 
void turn(Matrix& A, const string& name, char sym)
{
    int t, t1;
 
    cout << "Ходит" << "   " << name << " " << endl << endl;
    read_coordinates(t, t1);
 
    while (A.check(t, t1))
    {
        read_coordinates(t, t1);
    }
 
    A.filling(t, t1, sym);
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    Matrix A(3, 3);
    A.SetRand();
    string name1; //имя первого игрока
    string name2; // имя вторго игрока
    cout << "Введите имя первого игрока" << endl << endl;
    cin >> name1;
    cout << endl;
    cout << "Введите имя вторго игрока" << endl << endl;
    cin >> name2;
    cout << endl;
    system("clear");
 
    A.Print();
 
    for (int i = 0; i < 9; i++)
    {
        if (i % 2 == 0)
        {
            turn(A, name1, 'X');
        }
        else if (i % 2 != 0)
        {
            turn(A, name2, 'O');
        }
    }
 
    system("PAUSE");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2014, 19:40     Как через goto вернуться назад, чтоб еще раз проверить функцию?
Еще ссылки по теме:

C++ как сделать что бы после решения 1 примера пользевателю предлагало еще раз воспользоваться?
C++ Проверить введенное значение и, если это не цифра, вернуться ко вводу
C++ Как еще можно проверить четность числа?

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

Или воспользуйтесь поиском по форуму:
DrOffset
6420 / 3794 / 877
Регистрация: 30.01.2014
Сообщений: 6,584
27.04.2014, 19:40     Как через goto вернуться назад, чтоб еще раз проверить функцию? #11
Цитата Сообщение от kamish77777 Посмотреть сообщение
так дело не в красоте
Как это не странно, зачастую, "красивый" код лучше работает. Потому что содержит меньше неочевидных граблей.
Yandex
Объявления
27.04.2014, 19:40     Как через goto вернуться назад, чтоб еще раз проверить функцию?
Ответ Создать тему
Опции темы

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