【问题标题】:C Multidimensional Array: Am I missing something?C 多维数组:我错过了什么吗?
【发布时间】:2017-06-05 11:16:05
【问题描述】:

我目前正在学习 C,我刚刚编写了一个程序草稿,该程序允许用户在基于角色的迷宫/路径中移动玩家。我已经将迷宫/路径构建为多维字符数组,其中一个 while 循环通过替换数组中的某些字符来控制玩家的位置。这是我初始化的多维数组:

char maze[5][7] = {
    {"_", "_", "_", "_", "_"},
    {"|", " ", " ", " ", "|"},
    {"|", " ", "|", " ", "|"},
    {"|", " ", "|", "_", "|"},
    {"|", "_", " ", " ", "|"},
    {"|", " ", "|", " ", "|"},
    {"|", "_", "_", "_", "|"}
};

但是,当我尝试编译时,我得到了这个错误:

error: '}' expected

数组中的第一行显然缺少某种右括号,尽管我已多次检查正确的数组语法,这似乎是正确的。我错过了什么?还有其他问题吗?

【问题讨论】:

  • "|"是具有字符数组类型的字符串文字。 '|'是具有 char 类型的字符文字。您需要使用字符文字来初始化数组而不是字符串文字。并且该数组应声明为 char maze[7][5] 即它有 7 个“行”和 5 个“列”
  • 首先你弄错了尺寸。然后你有一个由 characters 组成的数组,而不是字符串。最后,C没有“多维数组”,它只有数组的数组(数组......)。
  • C 数组是 row major。因此,您的初始化程序的大小和类型都错误。
  • 你的问题解决了吗

标签: c arrays multidimensional-array


【解决方案1】:

您的数组是char 类型,但您的条目是char * 类型。将双引号 " 替换为单引号 '

单引号代表char 本身,双引号代表字符序列(字符串),因此编译器会尝试在末尾添加\0 字符。

另一方面,您必须交换值 5 和 7 进行初始化。

最终结果与此类似:

//7 big entries with 5 values
char maze[7][5] = {
    {'_', '_', '_', '_', '_'},
    {'_', '_', '_', '_', '_'},
    {'_', '_', '_', '_', '_'},
    {'_', '_', '_', '_', '_'},
    {'_', '_', '_', '_', '_'},
    {'_', '_', '_', '_', '_'},
    {'_', '_', '_', '_', '_'},
};

【讨论】:

    【解决方案2】:

    您需要将 " 替换为 ',因为 char 是单个符号。 第二个问题是,你分配的长度错误。

    用第二个长度替换第一个。

    char maze[7][5] = {
        {'_', '_', '_', '_', '_'},
        {'|', ' ', ' ', ' ', '|'},
        {'|', ' ', '|', ' ', '|'},
        {'|', ' ', '|', '_', '|'},
        {'|', '_', ' ', ' ', '|'},
        {'|', ' ', '|', ' ', '|'},
        {'|', '_', '_', '_', '|'}
    };
    

    【讨论】:

      【解决方案3】:

      您给数组maze[5][7] 提供了错误的维度,它是行和列,而您的定义是 7 行和 5 列。而且您将每个元素都作为字符串输入。它应该是像'a' 这样在单引号内给出的字符。如果您将在双引号中定义,它将成为字符串。这将解决您的问题

      char maze[7][5] = {
      {'_', '_', '_', '_', '_'},
      {'|', ' ', ' ', ' ', '|'},
      {'|', ' ', '|', ' ', '|'},
      {'|', ' ', '|', '_', '|'},
      {'|', '_', ' ', ' ', '|'},
      {'|', ' ', '|', ' ', '|'},
      {'|', '_', '_', '_', '|'}
      };
      

      希望这会有所帮助:)

      【讨论】:

      • 更好的答案是向他解释你为什么这样做以及为什么他的代码是错误的。
      • @VishwajeetVishu 一个很好的答案是独立的,但您当然可以参考现有的 cmets。
      • @FelixPalmen 现在我猜它应该是一个完整的答案?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多