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

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

Войти
Регистрация
Восстановить пароль
 
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 40
#1

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

27.04.2014, 17:26. Просмотров 611. Ответов 10
Метки нет (Все метки)

ребят,подскажите пожалуйста,как мне через 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??????????
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2014, 17:26     Как через goto вернуться назад, чтоб еще раз проверить функцию?
Посмотрите здесь:
Можно ли из консольного приложения вызвать еще одну консоль через функцию? C++
Народ поджскажите как сделать возврат через goto C++
C++ goto проходит несколько раз
C++ Как еще можно проверить четность числа?
C++ Проверить введенное значение и, если это не цифра, вернуться ко вводу
C++ как сделать что бы после решения 1 примера пользевателю предлагало еще раз воспользоваться?
C++ проверить кратное ли вводимое число девяти через функцию
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fishec
119 / 119 / 30
Регистрация: 07.09.2013
Сообщений: 338
27.04.2014, 17:30     Как через goto вернуться назад, чтоб еще раз проверить функцию? #2
if можно заменить на while, и не использовать goto.
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 40
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
Модератор
Эксперт С++
6283 / 5886 / 1906
Регистрация: 18.12.2011
Сообщений: 15,103
Завершенные тесты: 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
Сообщений: 40
27.04.2014, 17:59  [ТС]     Как через goto вернуться назад, чтоб еще раз проверить функцию? #5
Спасибо большое))
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,009
27.04.2014, 18:10     Как через goto вернуться назад, чтоб еще раз проверить функцию? #6
Перфекционист во мне не может смириться: чем while-то не угодил?
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 40
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
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,009
27.04.2014, 18:21     Как через goto вернуться назад, чтоб еще раз проверить функцию? #8
Сходу вижу повторяющийся код: строки с 99 по 114 и с 119 по 135 - вынести в отдельную функцию.
В остальное не вчитывался.
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 40
27.04.2014, 18:24  [ТС]     Как через goto вернуться назад, чтоб еще раз проверить функцию? #9
когда ввожу один раз новые координаты ставится нолик,а когда пару раз,все в нолики превращается(

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

Добавлено через 2 минуты
так дело не в красоте,а в том что не робит так как надо(
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,009
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++
Задумываюсь чтоб начать сразу с Qt(пока еще ни во что не углублялся). C++
C++ Еще раз об операции new
Еще раз о конструкторе по умолчанию C++
Ханойская башня еще раз C++

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

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

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