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

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

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

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

27.04.2014, 17:26. Просмотров 626. Ответов 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??????????
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2014, 17:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как через goto вернуться назад, чтоб еще раз проверить функцию? (C++):

Можно ли из консольного приложения вызвать еще одну консоль через функцию? - C++
Если да, то в каком заголовке она лежит?

Народ поджскажите как сделать возврат через goto - C++
Мне нужно сделать так, чтобы когда вводится число больше 16 символов то он выводил предупреждение и делал возврат чтобы заново ввести число...

Как еще можно проверить четность числа? - C++
У меня в голове два способа: 1) обычный просто проверить остаток от деления: % 2) проверить младший бит числа: if(x&amp;1)==1) ...

goto проходит несколько раз - C++
Есть код: int main() { char pwd; pwd: printf(&quot;&gt; &quot;); getline(pwd,15); if(strstr(pwd,&quot;1234567&quot;)) {if(pwd!=ch-1+'0')...

Проверить введенное значение и, если это не цифра, вернуться ко вводу - C++
Программа должна проверить введенное значение и, если это не цифра, вернуться ко вводу, но она зацикливается. Также если можно, как это...

Как сделать ссылку 'вернуться назад'? - HTML, CSS
Как присвоить путь для кнопки так, что бы она возвращала на предыдущую страницу - тоже самое, что кнопка назад на панели браузера делает?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
fishec
119 / 119 / 30
Регистрация: 07.09.2013
Сообщений: 338
27.04.2014, 17:30 #2
if можно заменить на while, и не использовать goto.
0
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 40
27.04.2014, 17:49  [ТС] #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 минут
Ребят,помогите пожалуйста,очень нужно)
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
27.04.2014, 17:55 #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');
1
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 40
27.04.2014, 17:59  [ТС] #5
Спасибо большое))
0
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,031
27.04.2014, 18:10 #6
Перфекционист во мне не может смириться: чем while-то не угодил?
0
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 40
27.04.2014, 18:20  [ТС] #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,только что то не работает(
0
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,031
27.04.2014, 18:21 #8
Сходу вижу повторяющийся код: строки с 99 по 114 и с 119 по 135 - вынести в отдельную функцию.
В остальное не вчитывался.
0
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 40
27.04.2014, 18:24  [ТС] #9
когда ввожу один раз новые координаты ставится нолик,а когда пару раз,все в нолики превращается(

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

Добавлено через 2 минуты
так дело не в красоте,а в том что не робит так как надо(
0
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,031
27.04.2014, 18:43 #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;
}
2
DrOffset
7154 / 4295 / 969
Регистрация: 30.01.2014
Сообщений: 7,099
27.04.2014, 19:40 #11
Цитата Сообщение от kamish77777 Посмотреть сообщение
так дело не в красоте
Как это не странно, зачастую, "красивый" код лучше работает. Потому что содержит меньше неочевидных граблей.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2014, 19:40
Привет! Вот еще темы с ответами:

Как перейти на другую форму окна, и вернуться назад - C#
С# Как перейти на другую форму окна , и назад вернуться (без диалоговых окон) Нужно перейти в другую форму полностью - чтоб...

Как вернуться назад и при этом перезагрузить страницу? - JavaScript
&lt;a href=&quot;javascript:history.go(-1);&quot;&gt;&amp;laquo; Вернуться назад&lt;/a&gt; Вопрос: Как сделать так, чтобы вернувшись назад, страница...

Какой лучший способ вернуться назад по кнопке "Назад" - JavaScript
Использовать метод back? Задействовать php? (более сложно).

С# WPF Как перейти на другую форму окна , и назад вернуться (без диалоговых окон) - C# WPF
С# WPF Использование XAML старт формы файлы форм Window1.xaml // подобие старой формы как вторая форма , что...


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

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

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