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

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

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

Проблема сравнения данных в массиве с другими данными - C++

10.09.2011, 21:45. Просмотров 699. Ответов 11
Метки нет (Все метки)

Только вчера начал осваивать С++, со многими вопросами разобрался, но с этим никак =(

Данные:
Есть двухмерный массив с тремя видами символов (char - 'X', 'O', ' '), все переменные объявлены и инициированы. Х и У - int.

Проблема:
При попытке сравнить данные имеющиеся в массиве по определенному адресу (причем, по любому) с другими данными, условия указанные в if игнорируются, как будто бы просто не находит в этой ячейке точно такого же значения.

Часть шапки:
Код
#include "stdafx.h" // требует MVS
#include <iostream> // cin, cout
#include <clocale>  // поддержка русского языка
#include <conio.h>  // _getch()
#include <stdlib.h> // поддержка функции очистки экрана system("cls")

using namespace std;

char map_full[3][3];
Варианты, которые использовал безрезультатно:

Код
		if ((map_full [x][y] == 'X') && (map_full [x][y] == 'O'))
		{
			cout << "Сюда ставить уже нельзя\n";
		}
Код
		if (map_full [x][y] != ' ')
		{
			cout << "Сюда ставить уже нельзя\n";
		}
Очень прошу помочь и указать в чем косяк, задолбался уже с этой частью кода.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2011, 21:45     Проблема сравнения данных в массиве с другими данными
Посмотрите здесь:

Реализация сравнения данных в массиве в классах - C++
Прошу нравоучения наверн, как организовать можно сравнение веса(weight) спортсменов и вывод в конце программы самого лёгкого.. с массивами...

Проблема ф-ии сравнения элементов списка - C++
День добрый, вот есть такая загогулина (вроде бы и простая, но я уже всю голову себе разнес): Есть список, каждый элемент из которого:...

Проблема сравнения чисел с плавающей точкой - C++
Добрый вечер, развивая тему к которой меня подтолкнул, Байт, посоветуйте ряд лайффаков на тему фикса (кроссплатформенность же ж ) ...

В массиве объектов класса все объекты заполняются данными последнего - C++
Есть задача: напишите программу, которая может выводить список членов по реальным именам, должностям, секретным именам и по предпочтению...

Сравнение данных структуры с данными, введенными с клавиатуры - C++
Есть такая структура: struct spisok { char departure; }; //далее будет использоваться spisok sp В sp.departure записано: 15:00...

Проблема с типами данных - C++
В одной функции одномерный динамический массив заполняется случайными числами // Çàïîëíåíèå ìàññèâà ñëó÷àéíûìè ÷èñëàìè int...

проблема с проверкой вводимых данных - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; double c,f; int main() { setlocale(LC_ALL, &quot;Russian&quot;); ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
1278 / 636 / 56
Регистрация: 11.08.2011
Сообщений: 2,278
Записей в блоге: 2
Завершенные тесты: 1
10.09.2011, 21:47     Проблема сравнения данных в массиве с другими данными #2
Выложите полный код, может ошибка не здесь.
Bearserker
0 / 0 / 0
Регистрация: 10.09.2011
Сообщений: 5
10.09.2011, 21:50  [ТС]     Проблема сравнения данных в массиве с другими данными #3
Просьба не пугаться =) Это экспериментальная площадка =)
Развернуть код
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
// XO.cpp: создаем Крестики-нолики .
//
 
#include "stdafx.h"
#include <iostream> // cin, cout
#include <clocale>  // поддержка русского языка
#include <conio.h>  // _getch()
#include <stdlib.h> // поддержка функции очистки экрана system("cls")
 
using namespace std;
 
int x_const=3;
int y_const=3;
char act;
int ch;
int z;
int x=1;
int y=1;
int x_old;
int y_old;
char map[3][3];
char map_full[3][3];
int i;
int j;
char gamer;
char gamer1 = 'X';
char gamer2 = 'O';
 
inline void plus (int& x, int& y)
{
    
    if (x==x_const)
    {
        x=x_const-1;
    }
    if (y==y_const)
    {
        y=y_const-1;
    }
    if (x<0)
    {
        x=0;
    }
    if (y<0)
    {
        y=0;
    }
 
    //z=' ';
}
 
inline void map_move (int& x, int& y)
{
    plus (x, y);
    map [x][y] = gamer; 
}
 
 
int main()
{
    setlocale (LC_CTYPE,"Russian");
    
    cout << "Введите кто первый ходит Х или О?\n";
 
        act = _getch();
        ch = static_cast<int>(act);
 
        //cout << ch;
        //_getch();
 
 
        switch (ch)
        {
 
        case -32:
            break;
 
        case 120:
            gamer = gamer1;
            break;
 
        case -27:
            gamer = gamer1;
            break;
 
        case 111:
            gamer = gamer2;
            break;
 
        case -82:
            gamer = gamer2;
            break;
        }
 
 
    for (i=0; i<x_const; i++)
    {
        for (j=0; j<y_const; j++)
        {
            map[i][j]=' ';
            map_full[i][j]=' ';
        }
    }
 
map[x][y] = gamer;
 
while (1)
{
    system("cls");
    cout <<"Координаты х="<<x<<", у="<<y<<"\n";
 
    for (i=0; i<x_const; i++)
    {
        for (j=0; j<y_const; j++)
        {
            cout << map[i][j];
        }
    cout << "\n";
    }
 
    act = _getch();
    ch = static_cast<int>(act);
 
    //cout << ch;
    //_getch();
 
 
    switch (ch)
    {
    case -32: // от двойного вывода на экран
        break;
 
    case 27:
            exit(0);
        break;
 
    case 80:
        map [x][y] = ' ';
        x_old=x;
        x++;
        map_move(x, y);
        break;
 
    case 72:
        map [x][y] = ' ';
        x_old=x;
        x--;
        map_move(x, y);
        break;
 
    case 75:
        map [x][y] = ' ';
        y_old=y;
        y--;
        map_move(x, y);
        break;
 
    case 77:
        map [x][y] = ' ';
        y_old=y;
        y++;
        map_move(x, y);
        break;
 
    case 13:
        if ((map_full [x_old][y_old] == gamer1) && (map_full [x_old][y_old] == gamer2))
        {
            cout << "Сюда ставить уже нельзя\n";
            _getch();
        } 
        else
        {
            map_full[x_old][y_old] = gamer;
            
            cout << "Запомнил\n";
            
            if (gamer == gamer1)
            {
                gamer = gamer2;
            } 
            else
            {
                gamer = gamer1;
            }
 
            _getch();
        }
        break;
         
    }
 
 
}
 
 
 
    return 0;
}
Dani
1278 / 636 / 56
Регистрация: 11.08.2011
Сообщений: 2,278
Записей в блоге: 2
Завершенные тесты: 1
10.09.2011, 21:54     Проблема сравнения данных в массиве с другими данными #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int x_const=3;
int y_const=3;
char act;
int ch, z;
int x=1;
int y=1;
int x_old;
int y_old;
char map[3][3];
char map_full[3][3];
int i;
int j;
char gamer;
char gamer1 = 'X';
char gamer2 = 'O';
Лучше воспользоваться оператором перечисления, тогда код красивее будет.

Добавлено через 1 минуту
C++
1
2
int x_const=3, y_const=3, ch, z, x=1, y=1, x_old, y_old, i, j;
char act, map[3][3], map_full[3][3], gamer, gamer1 = 'X', gamer2 = 'O';
Bearserker
0 / 0 / 0
Регистрация: 10.09.2011
Сообщений: 5
10.09.2011, 21:57  [ТС]     Проблема сравнения данных в массиве с другими данными #5
Цитата Сообщение от Dani Посмотреть сообщение
Лучше воспользоваться оператором перечисления, тогда код красивее будет
Спасибо, не знал о такой возможности.
Dani
1278 / 636 / 56
Регистрация: 11.08.2011
Сообщений: 2,278
Записей в блоге: 2
Завершенные тесты: 1
10.09.2011, 22:02     Проблема сравнения данных в массиве с другими данными #6
Еще вот:
C++
1
2
3
4
5
6
7
8
 if (gamer == gamer1)
                        {
                                gamer = gamer2;
                        } 
                        else
                        {
                                gamer = gamer1;
                        }
Не надо делать блок (хотя это и правильно), когда стоит 1 выражение:
C++
1
2
 if (gamer == gamer1)   gamer = gamer2;
                        else  gamer = gamer1;
Liebe
...
891 / 74 / 5
Регистрация: 21.02.2010
Сообщений: 2,196
Записей в блоге: 1
11.09.2011, 02:42     Проблема сравнения данных в массиве с другими данными #7
Цитата Сообщение от Bearserker Посмотреть сообщение
Варианты, которые использовал безрезультатно:

Код
		if ((map_full [x][y] == 'X') && (map_full [x][y] == 'O'))
		{
			cout << "Сюда ставить уже нельзя\n";
		}
а как у вас одновременно в одной ячейке может быть и 'X' и 'О' ? попробуйте вместо && использовать ||
C++
1
if ((map_full [x][y] == 'X') || (map_full [x][y] == 'O'))
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
11.09.2011, 07:54     Проблема сравнения данных в массиве с другими данными #8
Цитата Сообщение от Bearserker Посмотреть сообщение
Спасибо, не знал о такой возможности.
Лучше забудь о такой возможности. Проблем от этого гораздо больше, чем якобы пользы.

Добавлено через 1 минуту
Для задания размера map и map_full используй константы x_conssst и y_const.
antid0t
4 / 4 / 0
Регистрация: 23.02.2011
Сообщений: 42
11.09.2011, 11:32     Проблема сравнения данных в массиве с другими данными #9
Варианты, которые использовал безрезультатно:

Код
		if ((map_full [x][y] == 'X') && (map_full [x][y] == 'O'))
		{
			cout << "Сюда ставить уже нельзя\n";
		}
Код
		if (map_full [x][y] != ' ')
		{
			cout << "Сюда ставить уже нельзя\n";
		}
Очень прошу помочь и указать в чем косяк, задолбался уже с этой частью кода.[/QUOTE]

Как уже сказали выше, ошибка в первом коде: в одной ячейке не может быть одновремено записано Х и О, используйте оператор || (логическое ИЛИ).
Второй код выглядит правильным, но я не уверен что разрешаются пробелы перед размерностью масива, попробуйте if (map_full[x][y] != ' ')
Bearserker
0 / 0 / 0
Регистрация: 10.09.2011
Сообщений: 5
11.09.2011, 12:46  [ТС]     Проблема сравнения данных в массиве с другими данными #10
Цитата Сообщение от Dani Посмотреть сообщение
Не надо делать блок (хотя это и правильно), когда стоит 1 выражение
Об этой возможности знаю, но для новичка так легче читается код.

Цитата Сообщение от liebe Посмотреть сообщение
а как у вас одновременно в одной ячейке может быть и 'X' и 'О' ? попробуйте вместо && использовать ||
Спасибо, как раз здесь и была ошибка. Я не правильно понимал функцию && и ||.

Цитата Сообщение от Deviaphan Посмотреть сообщение
Лучше забудь о такой возможности. Проблем от этого гораздо больше, чем якобы пользы.
Вы не могли бы написать чем эта функция плоха?

Цитата Сообщение от Deviaphan Посмотреть сообщение
Для задания размера map и map_full используй константы x_conssst и y_const.
Изначально для этого и вводил константные переменные, но у меня возникли сложности в какой-то момент, но после подстановки чисел вместо переменных код заработал и я пока отложил это и вывел почти все переменные в шапку.

Цитата Сообщение от antid0t Посмотреть сообщение
Второй код выглядит правильным, но я не уверен что разрешаются пробелы перед размерностью масива, попробуйте if (map_full[x][y] != ' ')
Сейчас попробовал и код заработал =/ Единственное с чем я это связываю: перезапуск MSV, либо в момент запуска этой версии if была паралельная ошибка, которую уже исправил.

Проверил: наличие и отсутствие пробела перед размерностью массива никак не сказывается на результате.



Еще раз всем спасибо, вы мне очень помогли =)
Думаю я не последний раз к Вам обращаюсь за помощью.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
11.09.2011, 15:14     Проблема сравнения данных в массиве с другими данными #11
Цитата Сообщение от Bearserker Посмотреть сообщение
Вы не могли бы написать чем эта функция плоха?
Сложно читать и поддерживать. Чтобы найти определение переменной х, нужно читать строки полностью, невозможно сразу её увидеть. Ещё сложнее поменять тип отдельных переменных. В данной программе это всё пофиг, а вот в реальных программах очень не пофиг.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2011, 17:18     Проблема сравнения данных в массиве с другими данными
Еще ссылки по теме:

Проблема с typedef.... не виден новый тип данных! - C++
Пишу шаблон класса множество, у множеств элементы могут быть разного типа, одно, например, целочисленное, другое - строка. Пользователю...

Динамическая структура (СУБД на чистых c/c++, проблема занесения и чтения данных в таблицу) - C++
Доброго времени суток. Пишу СУБД на чистых c/c++ столкнулся с проблемой занесение и чтение данных в таблицу. Структура файла такая: ...

Сортировка данных в массиве - C++
Такой вопрос: написал прогу по структурам. Вроде код правильный, но при сортировке записи перемешиваются и получается бред. Быть может в...

Смещение в массиве данных - C++
Я просмотрел все примеры в операции с массивами,но такого не нашёл. Мне приходит массив например 1222,и мне надо сделать преобразование,...

Взаимодействие С++ с другими языками - C++
Доброго времени суток. Возник такой вопрос, можно ли написать код например для работы с OLE, скажем на Java, и использовать этот код в...


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

Или воспользуйтесь поиском по форуму:
Bearserker
0 / 0 / 0
Регистрация: 10.09.2011
Сообщений: 5
11.09.2011, 17:18  [ТС]     Проблема сравнения данных в массиве с другими данными #12
Спасибо, нечто подобное я и предлагал, но думал - вдруг есть еще и техническая сторона.
Yandex
Объявления
11.09.2011, 17:18     Проблема сравнения данных в массиве с другими данными
Ответ Создать тему
Опции темы

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