Четверг, 28 Марта 2024, 13:55

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » C/C++ » Непонятка с 2D-массивом
Непонятка с 2D-массивом
TAPAKAHДата: Пятница, 16 Апреля 2010, 09:53 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Обычный двухмерный массив. Макет поля сапера (консольный). в блоке inField() задается количество мин (руками, т.к. макет)
если мину поставить в крайние позиции, то с другого края она тоже появляется.
Второй день выедаю ложкой моск, ПОЧЕМУ???


Код того что на картинке

Code

#include <iostream>

#define FSize 15

#define FS FSize-1
using namespace std;
class cField{
    public:
    bool M;
    int V;
};

cField Field[FS][FS];

void SetV(){
//тутова  код определения количества мин вокруг клетки.
}

void inField(){
    Field[6][14].M=true;
    Field[3][0].M=true;
}

int main(){
    inField();
    //SetV();

    for(int i=0; i<=FS; i++){
       for(int j=0; j<=FS; j++){
          if(Field[i][j].M==true){
             cout <<"#";
          }else{
             cout <<Field[i][j].V;
          }
          if(j==FS){cout<<endl;}
       }
    }
     return 0;
}
Прикрепления: 1844048.jpg (14.6 Kb)


Все имеет свое имя и название.
Осмысливая смысл смысла, в смысле смысла смысла смысла, не смысл ли помыслить о немыслимом?
P:OG
Лишь идеи рождают шедевры.
ApatiДата: Пятница, 16 Апреля 2010, 10:09 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
cField Field[FS][FS];
FS чему равно? 14! Это значит что элементы массива находятся по номерами от 0 до 13. А у тебя ниже по коду Field[6][14].M=true; - выход за пределы массива.
BOOMДата: Пятница, 16 Апреля 2010, 10:19 | Сообщение # 3
I am the creator of ADE
Сейчас нет на сайте
Попробуй так:

Code

#include <iostream>     

#define FSize 15     

#define FS FSize-1     
using namespace std;     
class cField{     
        public:     
        bool M;     
        int V;     
};     

cField Field[FS][FS];     

void SetV(){     
//тутова  код определения количества мин вокруг клетки.     
}     

void inField(){     
        Field[6][13].M=true;     
        Field[3][0].M=true;     
}     

int main(){     
        inField();     
        //SetV();     

        for(int i=0; i<FS; i++){     
           for(int j=0; j<FS; j++){     
              if(Field[i][j].M==true){     
                 cout <<"#";     
              }else{     
                 cout <<Field[i][j].V;     
              }     
              if(j==FS-1){cout<<endl;}     
           }     
        }     
         return 0;     
}

Ошибка 1. Ее правильно указал Apati.
Ошибка 2. В циклах for. Строка: "i<=FS;" будит проверять и четырнадцатую позицию (Это и есть основная проблема.).
По этому лучше писать так: "i<FS;". Во втором цикле такая же проблема.

Код проверил, рабочий. Вот снимок:

ЗЫ...
Гляжу, cField ты указал, как класс. А не проще бы воспользоваться структурой (struct)? Она меньше памяти берет и как раз для этих задач предназначена...

Прикрепления: 4274364.jpg (5.8 Kb)


______________________________
Я вернулся, и это чудо.
______________________________


Сообщение отредактировал BOOM - Пятница, 16 Апреля 2010, 10:40
TAPAKAHДата: Пятница, 16 Апреля 2010, 10:48 | Сообщение # 4
почетный гость
Сейчас нет на сайте
Млин.. от я тупой... всем спасиба =))
Зы
Класс потому что не в макете (который я создавал для этого теста) нужен именно класс.


Все имеет свое имя и название.
Осмысливая смысл смысла, в смысле смысла смысла смысла, не смысл ли помыслить о немыслимом?
P:OG
Лишь идеи рождают шедевры.
Форум игроделов » Программирование » C/C++ » Непонятка с 2D-массивом
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг