所以我有一个我想稍后使用的二维数组。现在我只想填补空白。
到目前为止,我一直在摆弄数组类型和不同的默认值。根据我的理解,一个新数组填充了“0”,我也尝试过 NULL。
int r = 5;
int c = 5;
int i;
int j;
int k = 0;
int area = r*c;
const char *array[r][c]; //tried char array[r][c] and other types
在这里设置我的初始值和数组。
while(k< area){
for (j = 0; j < c; j++){
for (i = 0; i<r; i++){
if (array[i][j] == 0){
board[i][j] = ".";
}
printf("%c",aray[i][j]);
if (i = r - 1){
printf("\n");
}
k++;
}
}
}
这是我尝试用“.”替换所有非填充值(此时所有值)的地方,因此输出应该是一行 5x5 点。相反,我得到奇怪的字母和数字。我试过 %s insead of %c,但运气不佳,但输出不同。在我做 %s 的地方我得到了一些点,但仍然不在网格上并且出现了奇怪的值。
我也很确定 printf 在 for 循环中,默认情况下它在一个新行上,所以我不会得到网格,那么有更好的方法吗?
最佳答案
您拥有的是一个指针数组。这适用于二维字符串数组,但不适用于二维字符数组。您的问题并不清楚,因此我假设您实际上想要一个二维字符数组。语法是:char array [r][c];
。
值得注意的是,由于您使用了运行时变量 r
和 c
,因此该数组是一个变长数组 (VLA) .这样的数组不能放在文件范围内(“全局”)。将数组放在类似 main()
的函数中。
为了使用 VLA,您还必须有一个标准的 C 编译器。 C++ 编译器和恐龙编译器将无法工作。
由于您必须在函数内声明 VLA,因此它会获得“自动存储持续时间”。这意味着它不会自动初始化为零。如果需要,您必须自己执行此操作:memset(array, 0, sizeof array);
。但您可能希望将其初始化为某个特定字符而不是 0。
例子:
#include <stdio.h>
#include <string.h>
int main (void)
{
int r = 5;
int c = 5;
char array [r][c];
memset(array, '#', sizeof array);
for(size_t i=0; i<r; i++)
{
for(size_t j=0; j<c; j++)
{
printf("%c", array[i][j]);
}
printf("\n");
}
}
输出:
#####
#####
#####
#####
#####
关于c - 填充和打印二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54569788/