我正在尝试使用动态分配的2D数组绘制网格。
这是我的代码,

#include <stdio.h>
#include <stdlib.h>

int main(void){

    int i,j;
    int width;
    int height;

    printf("");
    scanf("%d %d",&height, &width);

    char** arr=malloc(sizeof(char*)*height);
    for ( i = 0; i<height;i++){

            arr[i] = malloc(sizeof(char)*width);

        }

    for ( i = 0; i<height; i++){
        for ( j = 0; j<width; j++){

                arr[i][j] =  '+' ;
                printf("%c\n", arr[i][j]);

            }
        }


    for (int i=0;i<height;i++){
        free(arr[i]);
    }
    free(arr);


    return 0;


}


如果我键入2 2作为高度和宽度,它将返回

+

+

+

+


但我期望得到

+
+

+
+


任何帮助,将不胜感激。

最佳答案

您是在每个基准面之后而不是每行数据之后打印换行符。

更改此:

    for ( j = 0; j<width; j++)
    {
        arr[i][j] =  '+' ;
        printf("%c\n", arr[i][j]); // WRONG: newline after each cell
    }


对此:

    for ( j = 0; j<width; j++)
    {
        arr[i][j] =  '+' ;
        printf("%c ", arr[i][j]);
    }
    fputc('\n', stdout);  // RIGHT: newline after each row.


对于它的价值,如果您只想绘制网格,则该数组将毫无用处。只需绘制网格即可。

关于c - 在C中使用动态2D数组绘制网格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31889625/

10-13 02:22