c - 填充和打印二维数组

标签 c arrays

所以我有一个我想稍后使用的二维数组。现在我只想填补空白。

到目前为止,我一直在摆弄数组类型和不同的默认值。根据我的理解,一个新数组填充了“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];

值得注意的是,由于您使用了运行时变量 rc,因此该数组是一个变长数组 (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/

相关文章:

javascript - javascript 数组的数据属性

java - Java 中的基本井字棋

arrays - 索引超出范围 : Mapping the output of a 3-input function to a 3-dimentional floating-point array in Swift 4

c - 没有 math.h 包含 - sqrt 函数返回值?

c - 使用 execlp() 运行 C 程序?

c++ - 确定 GetElementPtr 的字节偏移量

c - C 语言中的位图 8 位灰度图像

c - 为什么这个循环范围的一个小的、特别的变化会导致执行时间发生如此巨大的变化——从 15 毫秒到无穷大?

arrays - 在同一文档 MongoDB 中将一个元素从一个数组移动到另一个数组

C - 将 2 个 2D 字符串数组组合并更改为更大的 2D 数组的最简单方法