Непонятная ошибка в двоичном массиве - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Изучаю Си для себя. Разработал следующую программу: на экран выводится двоичный массив 10*10, по краю ограничен "стенкой". В каком-то месте располагается символ Х. При введении 'a' 's' 'd' 'w' символ Х перемещается в разные стороны, если упирается в стенку, то остается на месте.
#include <stdio.h>
#include <windows.h>
 
#define X 10
#define Y 10
 
void masShow(int mas[][Y], int x, int y); \\ выводит массив на экран
void moveRight(int mas[][Y], int x, int y); \\ смещение Х вправо
void moveLeft(int mas[][Y], int x, int y); \\ смещение Х влево
void moveUp(int mas[][Y], int x, int y); \\ смещение Х вверх
void moveDown(int mas[][Y], int x, int y); \\ смещение Х вниз
 
int main()
{
    int button;
    
    int mas[X][Y]={
                    {0,0,0,0,0,0,0,0,0,0},
                    {0,1,1,1,1,1,1,1,1,0},
                    {0,1,1,1,1,1,1,1,1,0}, \\ 0 - стенка; 1 - пробел; 2 - Х
                    {0,1,1,1,1,1,1,1,1,0},  
                    {0,1,1,1,1,2,1,1,1,0},
                    {0,1,1,1,1,1,1,1,1,0},
                    {0,1,1,1,1,1,1,1,1,0},
                    {0,1,1,1,1,1,1,1,1,0},
                    {0,1,1,1,1,1,1,1,1,0},
                    {0,0,0,0,0,0,0,0,0,0}
                  };
    
    masShow(mas,X,Y);
    while((button=getchar())!='q') \\ для завершения программы ввести q 
    {
        switch(button)
        {
            case 'd':
                moveRight(mas,X,Y);
                masShow(mas,X,Y);
                break;
            case 'a':
                moveLeft(mas,X,Y);
                masShow(mas,X,Y);
                break;
            case 'w':
                moveUp(mas,X,Y);
                masShow(mas,X,Y);
                break;
            case 's':
                moveDown(mas,X,Y);
                masShow(mas,X,Y);
                break;
        }
    }
        
    getchar();
    return 0;
}
 
void masShow(int mas[][Y], int x, int y)
{
    int a,b;
    system("cls");
    for(a=0; a<x; a++)
    {
        for(b=0; b<y; b++)
        {
            if(mas[a][b]==0)
                printf("#");
            if(mas[a][b]==1)
                printf(" ");
            if(mas[a][b]==2)
                printf("X");
        }
        printf("\n");
    }
}
 
void moveRight(int mas[][Y], int x, int y)
{
    int a,b;
    
    for(a=0; a<x; a++)
    {
        for(b=0; b<y; b++)
        {
            if((mas[a][b]==2)&&(b<Y-2))
            {
                mas[a][b]=1;
                mas[a][b+1]=2;
                break;
            }
        }
    }
}
 
void moveLeft(int mas[][Y], int x, int y)
{
    int a,b;
    
    for(a=0; a<x; a++)
    {
        for(b=0; b<y; b++)
        {
            if((mas[a][b]==2)&&(b>1))
            {
                mas[a][b]=1;
                mas[a][b-1]=2;
                break;
            }
        }
    }
}
 
void moveDown(int mas[][Y], int x, int y)
{
    int a,b;
    
    for(a=0; a<x; a++)
    {
        for(b=0; b<y; b++)
        {
            if((mas[a][b]==2)&&(a<X-2))
            {
                mas[a][b]=1;
                mas[a+1][b]=2;
                break;
            }
        }
    }
}
 
void moveUp(int mas[][Y], int x, int y)
{
    int a,b;
    
    for(a=0; a<x; a++)
    {
        for(b=0; b<y; b++)
        {
            if((mas[a][b]==2)&&(a>1))
            {
                mas[a][b]=1;
                mas[a-1][b]=2;
                break;
            }
        }
    }
}
Проблема заключается в функции moveDown. При вводе 's' символ Х сразу перемещается в самый низ к стенке. Хотя три остальные функции работают правильно. Не пойму, в чем проблема. Всю голову сломал. Функции практически идентичные, делались путем Ctrl+C Ctrl+V. Причем, если использовать следующий костыль
mas[a][b]=1;
     a=a+1;
     mas[a][b]=2;
     break;
то все работает правильно. В чем может быть причина?

Решение задачи: «Непонятная ошибка в двоичном массиве»

textual
Листинг программы
if((mas[a][b]==2)&&(a<X-2))

Объяснение кода листинга программы

В представленном коде выполняется проверка условия для двоичного массива. В данном случае, проверяется, что элемент массива с индексами a и b равен 2, а значение переменной a меньше X-2. Код можно оформить в виде списка следующим образом:

  1. Объявление переменных:
    • mas[a][b] - элемент двоичного массива с индексами a и b
    • X - размер массива
  2. Проверка условия:
    • mas[a][b] == 2 - проверка, что элемент массива равен 2
    • a < X-2 - проверка, что значение переменной a меньше размера массива минус 2 Вот как это может выглядеть в виде списка:
  3. Объявление переменных:
    • mas[a][b] - элемент двоичного массива с индексами a и b
    • X - размер массива
  4. Проверка условия:
    • mas[a][b] == 2 - проверка, что элемент массива равен 2
    • a < X-2 - проверка, что значение переменной a меньше размера массива минус 2 Пожалуйста, уточните, если нужно более подробное объяснение или если есть дополнительные вопросы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5
Похожие ответы