繁体   English   中英

在C中处理多维数组

[英]Addressing multidimensional arrays in C

问题是什么? 我认为没有逻辑问题或编译错误

但是循环播放了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");
    }
}

在您的case LEFT您要递减x_ ,而不要递增。 x_++更改为x_--

case UPcase UP您也想递减,因此x_-- x_++更改为x_--

我认为您的困惑是,向上移动需要递减,而不是递增。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM