我正在尝试使用动态分配的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("%cn", 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("%cn", 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.
,不管它的价值是什么,如果你想做的只是画一个网格,这个数组是完全无用的。