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

Ошибка при заполнении массива - C++

Восстановить пароль Регистрация
 
bombat
0 / 0 / 0
Регистрация: 03.01.2014
Сообщений: 8
03.01.2014, 07:32     Ошибка при заполнении массива #1
Помогите пожалуйста решить проблему:
Это программа для игры в крестики нолики.
В первой функции void instruction() необходимо вывести массив [3][3]
и в задумке надо что бы массив заполнялся символами от 1-9 типом char,
|1|2|3|
|4|5|6|
|7|8|9|
но вместо этого, при запуске массив заполняется кучей цифр, и выдает что то типа:
|23412344|23412344|23412344344
|23412344|23412344|23412344344
|23412344|23412344|23412344344





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
#include <iostream>
#include <conio.h>
#include <random>
#include <time.h>
 
using namespace std;
 
char name1[30];
char name2[30];
char table [3][3];
bool step;
 
void instruction()
{
        cout << "\t\t*** Game ***\n\n";
    cout << "Rules:\n";
    cout << "There is a game for 2 players in a table 3x3\n";
    cout << "There is only 1 winner\n";
    cout << "There is a table:\n\n";
    int l = 0;
    for(int i (0); i < 3; i++)
    {
        for(int j(0); j < 3; j++)
        {
            cout << "| " << l+1 << '   ' ;
            table[i][j] = (49+l);
            l++;
        }
        cout << ' | ';
        cout << endl;
    }
    cout << "\nPut an number of a spot for your turn\n";
    cout << "press any key:";
    _getch();
}
 
bool input()
{
    for(int i(0); i < 3; i++)
    {
        for (int j(0); j < 3; j++)
        {
            cout << "| " << table[i][j] << '  ';
        }
        cout << ' | ';
        cout << endl;
    }
 
    cout << endl;
    if(step)
        cout << "Turn is " << name1 << " : ";
    else cout << "Turn is " << name2 << ": ";
 
    int n;
    cin >> n;
    if(n < 1 || n > 9)
        return false;
    int i,j;
 
    if(n%3 == 0) 
    {
        i = n/3-1;
        j = 2;
    }
    else
    { 
        j = n%3-1;
        i = n/3;
    }
    
    if(table[i][j] == '0' || table[i][j] == 'X')
        return false;
 
    if(step)
    {
        table[i][j] = 'X';
        step = false;
    }
    else {table[i][j] = '0'; step = true; }
    return true;
}
bool win()
{
    for(int i(0); i < 3; i++)
        if((table[i][0] == table[i][1]) && (table[i][0] == table[i][2]))
            return true;
 
        else
            if((table[0][i] == table[1][i]) && (table[0][i] == table[2][i]))
                return true;
            else if((table[0][0] == table[1][1] && table[0][0] == table[2][2]) || (table[0][2] == table[1][1] && table[0][2] == table[2][0]))
                return true;
 
    return false;
}
int main()
{
    setlocale(LC_ALL , "Russian");
 
    instruction();
    system("cls");
    
    ;
    
    cout << "Enter the name of 1-th player: ";
    cin.getline(name1,30);
    cout << "Enter the name of 2-nd player: ";
    cin. getline(name2,30);
 
    srand(time(NULL));
    if(rand() &1)
        step = true;
    else step = false;
 
    while(!win())
    {
        system("cls");
        if( !input() )
        {
            cout << "wrong number!";
            _getch();
        }
    }
 
    system("cls");
    if(step)
        cout << "The winner is " << name2 << endl;
    else cout << "The winner is" << name1 << endl;
 
 
    _getch();
    return 0;
}
Добавлено через 1 час 7 минут
нашел проблему...убрал в первом цикле все пробелы, заработало.
Тогда вопрос, почему изза пробелов появлялись левые цифры? и как это исправить, если надо добавить пробелы?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.01.2014, 10:52     Ошибка при заполнении массива #2
Цитата Сообщение от bombat Посмотреть сообщение
Тогда вопрос, почему изза пробелов появлялись левые цифры?
В одинарных кавычках должен быть один символ:
C++
1
2
3
cout << "| " << l+1 << ' ' ;
...
cout << '|';
Цитата Сообщение от bombat Посмотреть сообщение
и как это исправить, если надо добавить пробелы?
Если один пробел, то один - в одинарных кавычках. Если несколько, то выводить строку (то, что в двойных кавычках).
bombat
0 / 0 / 0
Регистрация: 03.01.2014
Сообщений: 8
03.01.2014, 13:11  [ТС]     Ошибка при заполнении массива #3
спасибо!
Staffi
 Аватар для Staffi
0 / 0 / 0
Регистрация: 05.02.2014
Сообщений: 26
17.02.2014, 11:57     Ошибка при заполнении массива #4
bombat, привет. обьясни как у тебя заполняется массив от 1 до 9..

не пойму вот этот цикл
C++
1
2
3
4
5
6
7
8
9
10
11
for(int i (0); i < 3; i++)
    {
        for(int j(0); j < 3; j++)
        {
            cout << "| " << l+1 << '   ' ;
            table[i][j] = (49+l);
            l++;
        }
        cout << ' | ';
        cout << endl;
    }
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.02.2014, 12:35     Ошибка при заполнении массива #5
49 - это код цифры(символа) '1'. l (сначала раная 0), при каждой итерации, увеличивается на единицу. Т.е., сначала заносится код символа '1' (49 + 0), потом код символа '2' (49 + 1 == 50) и т.д.
Staffi
 Аватар для Staffi
0 / 0 / 0
Регистрация: 05.02.2014
Сообщений: 26
17.02.2014, 14:01     Ошибка при заполнении массива #6
alsav22, я не пойму как заполнить массив нулями, по поводу символа я уже дочитался.. а вот как заполнить нулями а не нумеровать.....
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.02.2014, 14:33     Ошибка при заполнении массива #7
Цитата Сообщение от Staffi Посмотреть сообщение
я не пойму как заполнить массив нулями
В каждую ячейку массива пометстить '0':
C++
1
2
3
4
char table[3][3];
    for(int i = 0; i < 3; i++)
        for(int j = 0; j < 3; j++)
            table[i][j] = '0';
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.02.2014, 15:04     Ошибка при заполнении массива #8
Цитата Сообщение от alsav22 Посмотреть сообщение
В одинарных кавычках должен быть один символ:
Есть ещё такая тема как multicharacter literal
http://stackoverflow.com/questions/7...ple-characters
Staffi
 Аватар для Staffi
0 / 0 / 0
Регистрация: 05.02.2014
Сообщений: 26
17.02.2014, 15:24     Ошибка при заполнении массива #9
Цитата Сообщение от alsav22 Посмотреть сообщение
В каждую ячейку массива пометстить '0':
C++
1
2
3
4
char table[3][3];
    for(int i = 0; i < 3; i++)
        for(int j = 0; j < 3; j++)
            table[i][j] = '0';
тогда этот код перестает работать
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.02.2014, 15:38     Ошибка при заполнении массива #10
Цитата Сообщение от Staffi Посмотреть сообщение
тогда этот код перестает работать
И что с того? Я ответил на вопрос:
Цитата Сообщение от Staffi Посмотреть сообщение
как заполнить массив нулями
Добавлено через 11 минут

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Есть ещё такая тема как multicharacter literal
Мутная вещь. Если правильно понял, лучше не использовать.

Staffi
 Аватар для Staffi
0 / 0 / 0
Регистрация: 05.02.2014
Сообщений: 26
17.02.2014, 15:45     Ошибка при заполнении массива #11
alsav22, тогда подскажите как пронумеровать массив в первой функции и как сделать что бы потом он выводился с нулями в матрице... именно в этом коде.. объясните пожалуйста.. если не затруднит.

Добавлено через 3 минуты
alsav22, помогите разобраться в этом коде
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2014, 15:49     Ошибка при заполнении массива
Еще ссылки по теме:

Ошибка при заполнении двусвязного списка C++
C++ ошибка при заполнении массива
Ошибка при заполнении динамического массива C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.02.2014, 15:49     Ошибка при заполнении массива #12
Цитата Сообщение от alsav22 Посмотреть сообщение
Мутная вещь. Если правильно понял, лучше не использовать.
Ну это по сути int, только заданный в символьной форме. Может быть удобен для задания констант и их запоминания. Т.к. в 2 раза короче, чем в hex-записи и могут использоваться любые символы, а не только 16.
Yandex
Объявления
17.02.2014, 15:49     Ошибка при заполнении массива
Ответ Создать тему
Опции темы

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