Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прога выводит лишнее. И не выводит нужное... 
:(
    Опции темы
ILyAHA
Дата 30.4.2008, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гламурный хакер
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 30.3.2007
Где: Ярославская обл. г.Рыбинск

Репутация: нет
Всего: 3



Есть код:
Код

#include <iostream.h>

#include <conio.h>
#include <stdlib.h>
#include <time.h>
enum bool {empty,false,true};
typedef bool board[8][8];

void KeyPressed();
void MasOut(board *mas);
void InitMas(board *mas);
void UserFill(board *mas);
void RandFill(board *mas);

void main(){
  board deck;
  int mnu_check;

  clrscr();
  InitMas(&deck);
  randomize();
  UserFill(&deck);
  MasOut(&deck);

}

void KeyPressed(){
  cout << "\nЌ ¦¬Ё «оЎго Є« ўЁиг\n";
  while (!kbhit());
}

void MasOut(board *mas){
  for (int i=0; i<8; i++){
    cout <<"\n";
      for (int j=0; j<8; j++)
    cout <<*mas[i][j] <<" ";
  }
}

void InitMas(board *mas){
  for (int i=0; i<8; i++)
   for (int j=0; j<8; j++)
    *mas[i][j]=empty;
}

void UserFill(board *mas){
  int a, b, full=0;
  while (full < 8){
    clrscr();
    MasOut(mas);
    cout << "\nВведи строку: "; cin >> a;

    cout << "\nВведи столбец: "; cin >> b;
    if (*mas[a-1][b-1] != empty){
      cout << "\nЗдесь нельзя разместить ладью!";
      KeyPressed();
    }
    else{
      for(int i=0; i<8; i++){
    *mas[a-1][i] = false;
    *mas[i][b-1] = false;
      }
    *mas[a-1][b-1] = true;
    full++;
    }
  }
}


void RandFill(board *mas){
  int a, b;
  a=random(7);
  b=random(7);

  for(int k=0; k<8; k++){
    a++;
    if (a==8)
      a=0;
    for(int j=0; j<8; j++)
      if (*mas[a][b] == empty){
    k=8; j=8;
    }
      else {
    b++;
    if (b==8)
      b=0;
    }
  }

  for(int i=0; i<8; i++){
    *mas[a][i] = false;
    *mas[i][b] = false;
  }
  *mas[a][b] = true;
}



компилится всё нормально. запускаю.
Происходят такие вещи:
-- заместо сообщения : " Введи строку "  выдодит только "Вве@"и число
-- А после завершения пишет сообщение: "Null po☺ ter assignment☺"

Вот результат выполнения:


2 1 1 1 1 1 1 1
1 2 1 1 1 1 1 1
1 1 2 1 1 1 1 1
1 1 1 2 1 1 1 1
1 1 1 1 2 1 1 1
1 1 1 1 1 2 1 1
1 1 1 1 1 1 2 1
1 1 1 1 1 1 1 0
Вве☺8

Вве☺8

2 1 1 1 1 1 1 1
1 2 1 1 1 1 1 1
1 1 2 1 1 1 1 1
1 1 1 2 1 1 1 1
1 1 1 1 2 1 1 1
1 1 1 1 1 2 1 1
1 1 1 1 1 1 2 1
1 1 1 1 1 1 1 2 Null po☺ ter assignment☺

пишу на Borland C 3.0

Что работает не так?

Это сообщение отредактировал(а) ILyAHA - 30.4.2008, 16:06
--------------------
<sсriрt>alert('xss')</sсriрt>
PM MAIL   Вверх
Proger89
Дата 1.5.2008, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 13.12.2007

Репутация: нет
Всего: нет



Незнаю толком в чем там была проблема. 
Если передавать не указатель на указатель на двумерный массив (имя массива является указателем на его первый элемент), а передавать просто указатель, тоесть
UserFill(deck);
вместо
UserFill(&deck);

и работатать с массивом так:
mas[a][b] == empty
а не:
*mas[a][b] == empty
 то проблема решается и все работает как надо. Только исправить это нужно во всех местах программы.

PS Возможно BC генерирует некоректный код в приведенном случае, о чем свидетельствует вывод сообшения:

Null po☺ ter assignment☺ (null pointer assignment - присваивание нулевому указателю).
PM   Вверх
JackYF
Дата 1.5.2008, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Скорее всего, выход за границы массива. Посмотри с отладчиком.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
volvo877
Дата 1.5.2008, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: нет
Всего: 116



Цитата(ILyAHA @  30.4.2008,  15:04 Найти цитируемый пост)
Что работает не так?

Все обращения вида *mas[i][j] меняешь на (*mas)[i][j], и все работает, как ты хотел...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1102 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.