C - 2D数组的问题

时间:2016-01-26 15:22:19

标签: c arrays multidimensional-array duplicates

我正在尝试使用C来执行某种笛卡尔坐标系统在命令行上打印。不幸的是,在尝试将特殊字符插入到保存数据的指定2D数组时会出现一些问题。在循环的一次运行期间(P'的第二行/右行),有两个字符插入到数组中:

enter image description here

有人有解决方案吗?

产生问题的部分代码(makeDots填充数组):

#include <stdio.h>

#define WIDTH 20
#define HEIGHT 10

void makeDots(char a[WIDTH][HEIGHT]) {
    for (int x = 4; x < 7; x++) {
        int y = x + 1;
        //cartesian coordinate system - point of origin in bottom left corner
        a[y][x] = 'P';
        //a[i-1][WIDTH / 2 + i] = '+'; //try to remove misplaced P - leads to empty array
    }
}

void clear(char a[WIDTH][HEIGHT]) {
    for (int l = 0; l < HEIGHT; l++) {
        for (int c = 0; c < WIDTH; c++) {
            a[l][c] = '+';
        }
    }
}

void draw(char a[WIDTH][HEIGHT]) {
    for (int l = HEIGHT - 1; l >= 0; l--) {
        for (int c = 0; c < WIDTH; c++) {
            putchar(a[l][c]);
        }
        printf("\n");
    }
}

int main() {
    char a[WIDTH][HEIGHT];
    clear(a);
    makeDots(a);
    draw(a);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

请参阅您的此代码:

void clear(char a[WIDTH][HEIGHT]) {
    for (int l = 0; l < HEIGHT; l++) {
        for (int c = 0; c < WIDTH; c++) {
            a[l][c] = '+';
        }
    }
}

您正在使用[WIDTH] [HEIGHT]作为您的char数组,但是在for循环中,您正在使用相反的方法。看看吧。这可能是问题所在。

答案 1 :(得分:1)

您在函数x中混合了ymakeDots,在函数lc中混合了cleardraw访问数组。像这样调整你的代码:

#define WIDTH 20
#define HEIGHT 10

void makeDots(char a[WIDTH][HEIGHT]) {
    for (int x = 4; x < 7; x++) {
        int y = x + 1;
        //cartesian coordinate system - point of origin in bottom left corner
        a[x][y] = 'P';
      //  ^  ^
        //a[WIDTH / 2 + i][i-1] = '+'; //try to remove misplaced P - leads to empty array
    }
}

void clear(char a[WIDTH][HEIGHT]) {
    for (int l = 0; l < HEIGHT; l++) {
        for (int c = 0; c < WIDTH; c++) {
            a[c][l] = '+';
          //  ^  ^
        }
    }
}

void draw(char a[WIDTH][HEIGHT]) {
    for (int l = HEIGHT- 1; l >= 0; l--) {
        for (int c = 0; c < WIDTH; c++) {
            putchar(a[c][l]);
                  //  ^  ^
        }
        printf("\n");
    }
}

int main() {
    char a[WIDTH][HEIGHT];
    clear(a);
    makeDots(a);
    draw(a);
    return 0;
}