в чем проблема? Я думаю, что нет логической проблемы или ошибки компиляции
но цикл внезапно остановился после выполнения цикла 16 раз ...
это ошибка компилятора gcc? я почти испугался ...
как будто нет ошибки компиляции, которая появляется, но не работает ,,,
заранее спасибо :) извините за вопрос редактирования
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define RIGHT 0
#define DOWN 1
#define LEFT 2
#define UP 3
int main()
{
int x,y;
scanf("%d %d", &x, &y);
int **arr;
arr = (int**)malloc(sizeof(int*)*x);
for(int i = 0; i < x; i++) arr[i] = (int*)malloc(sizeof(int) * y );
int x_ = 0, y_ = 0;
int MAX_x = x-1;
int MAX_y = y-1;
int MIN_x = 0;
int MIN_y = 0;
int direction = RIGHT;
int num = 0;
while(true)
{
arr[x_][y_] = num++;
printf("%d", num);
//printf("%d", arr[x_][y_]);
switch ( direction )
{
case RIGHT:
if ( y_ == MAX_y )
{
direction = DOWN; MIN_x ++; x_++;
}
else
{
y_++;
}
break;
case DOWN:
if ( x_ == MAX_x )
{
direction = LEFT; MAX_y --; y_--;
}
else
{
x_++;
}
break;
case LEFT:
if ( y_ == MIN_y )
{
direction = UP; MAX_x --; x_++;
}
else
{
y_--;
}
break;
case UP:
if ( x_ == MIN_x )
{
direction = RIGHT; MIN_y ++; y_++;
}
else
{
x_++;
}
break;
default : break;
}
if (num == x * y )
break;
}
for(int i = 0; i < x; i ++)
{
for(int j = 0; j < y; j ++ )
{
printf("%3d", arr[i][j]);
}
printf("\n");
}
}
Я бы рекомендовал использовать более описательные имена переменных, возможно, что-то вроде numberOfRows
, numberOfColumns
, rowIndex
или columnIndex
вместо x_
, y_
, x
, y
.
Прочтите этот вопрос и ответы на него: stackoverflow.com/questions/42094465/…
Просто сделайте int arr[x][y];
и избегайте всех сложностей, связанных с malloc
В коде нет многомерного массива.
спасибо, ребята, я постараюсь добавить больше, не пишите код
Какой результат вы ожидаете от этой программы? Цикл остановится, когда будет выполнено условие if (num == x * y). В этом нет ничего неожиданного.
В вашем case LEFT
вы хотите уменьшить x_
, а не увеличивать его. смени свой x_++
на x_--
.
В вашем case UP
вы также хотите уменьшить, поэтому измените этот x_++
на x_--
.
Я думаю, ваше замешательство здесь в том, что для продвижения вверх требуется декремент, а не инкремент.
Добро пожаловать в Stack Overflow! Пожалуйста, возьмите тур и посетите центр помощи, чтобы получить максимальную отдачу от этого сайта.