Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
6 / 6 / 3
Регистрация: 05.12.2014
Сообщений: 23
1

Некоректный инкремент переменной цикла for при сравнении элементов массива

05.12.2014, 12:54. Показов 980. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нашёл проблему в коде, но никак не могу догнать, в чём дело.

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
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <conio.h> 
 
using namespace std;    
 
char cField[8][14];
 
char check(void);
 
int main( void )
{
    setlocale(LC_ALL, "Russian");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    char znak;
    
    for (int r = 0; r < 8; r++)         //заполняем массив пробелами
    {
        for (int c = 0; c < 14; c++)
        {
            cField[r][c] = ' ';
        }
    }
 
    cField[4][3] = 'X';         //присваиваем трём элементам значения
    cField[4][7] = 'X';
    cField[4][11] = 'X';
 
    znak = check();         //присваиваем переменной вернувшийся символ
    cout << znak;
 
    _getch();
    return 0;
} 
 
char check(void)
{
    for (int i = 2; i < 7; i += 2)                      //проверяем строки массива
    {
        if (cField[i][3] == cField[i][7]) return cField[i][3];  //если истинно, возвращаем символ
    }
}
Проблема в том, что некорректно проходит вторая итерация цикла for. Если мы 'X' присвоим по следующим адресам:
C++
1
2
3
    cField[2][3] = 'X';         
    cField[2][7] = 'X';
    cField[2][11] = 'X';
, то всё пройдёт нормально. Что в этих нескольких строчках не так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.12.2014, 12:54
Ответы с готовыми решениями:

Сбой при сравнении двух элементов массива
public class Girls : ITreeComponent, IComparable&lt;Girls&gt; { public string Name; ...

Сбой при сравнении двух элементов массива
Пытаюсь отсортировать массив mass.Sort(); выкидывает ошибку Сбой при сравнении двух элементов...

Сбой при сравнении двух элементов массива и IComparer<T>
class Program { static void Main(string args) { List&lt;Book&gt;...

Не срабатывает if при сравнении переменной типа String со значением
Всем привет! Укажите на мою ошибку. Считываю значение с консоли и сравниваю его со значением в...

2
Модератор
Эксперт С++
13690 / 10895 / 6470
Регистрация: 18.12.2011
Сообщений: 29,077
05.12.2014, 13:12 2
1. А что возвращает check, если не найдется таких символов?
2. Функция check закончит работу на первой итерации, т.к.
cField[2][3] равно пробелу и cField[2][7] равно пробелу
Напишите
C++
1
if (cField[i][3] == cField[i][7] && cField[i][7]=='X') return cField[i][3];
0
6 / 6 / 3
Регистрация: 05.12.2014
Сообщений: 23
05.12.2014, 13:25  [ТС] 3
Цитата Сообщение от zss Посмотреть сообщение
2. Функция check закончит работу на первой итерации, т.к.
cField[2][3] равно пробелу и cField[2][7] равно пробелу
разве он не должен перейти к следующей итерации?

Добавлено через 2 минуты
Всё, туплю с утра. Спасибо!
0
05.12.2014, 13:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2014, 13:25
Помогаю со студенческими работами здесь

Неожиданный результат при выводе значения переменной, несмотря на инкремент
подскажите почему значения a и с начинаются с 1 а не с 2 стоит же &quot;++&quot; int a = 1; void f() {...

Зависание при сравнении char * переменной и сообщения, полученного по локалке
Доброго времени суток. Я пишу приложение для работы по локальной сети, в котором можно...

Сортировка List<struct>: "ошибка при сравнении двух элементов массива."
Имеется примерно такой код: struct aBox { public int...

Некоректный вывод переменной extern
Есть заголовочный файл в котором объявлена переменная extern, пытаюсь взаимодействовать с этой...

Ошибка при сравнении массива
Вот код: public void actionPerformed(ActionEvent ae) { String YourNumb=new String...

Ошибка при сравнении элемента массива и значения из textbox
Задача следующая: организовать авторизацию пользователей. Имена и пароли пользователей хранятся в...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru