初始化数组

时间:2016-07-03 22:49:05

标签: c arrays

我需要创建一个空的30 x 30数组,并使用double for循环填充点。我陷入困境,如何编写数组并用点填充它。我对编程很陌生,这远非正确,但我设法写了

<div class="parent">
  <div class="inner">
    <div>My text... My text... My text... My text... My text... My text... My text... My text... My text... My text... My text... My text... My text... My text... My text... My text... My text...</div>
    <div>CENTERED X CENTERED</div>
    <div>My text... My text... My text... My text... My text... My text... My text... My text... My text... My text... My text... My text... My text... My text... My text... My text... My text...</div>
  </div>
</div>

3 个答案:

答案 0 :(得分:2)

有几件事:

您需要确保引用您的文字。在这种情况下,编译器正在查看您的.作为结构成员运算符。您需要将其用单引号括起来(双引号用于字符串文字),以通知编译器它是文字而不是操作符。此外,您需要使用分号终止语句。

除此之外,您的for循环中出现了一个错误。您需要使用<运算符作为终止条件而不是<=运算符。通过使用'&lt; ='运算符,for循环仍然为i = 30运行,但是,这超出了数组边界并且可能导致错误,因为C数组是0索引的。此外,在char循环中使用int计数器而不是for计数器也没有什么好处。这也可能导致意外的整数溢出。

您正在i循环初始值设定项中重新定义全局定义的jfor。这在C中是允许的,但如果可能的话应该避免,因为它令人困惑。您应该删除全局ij,或更改for循环,以便它们不会声明新计数器。

除非您尝试提示用户输入地图数据,否则循环体中的scanf()调用毫无意义。

您可以将rowscols定义为预处理器宏,以便在编译时轻松调整它们。

更多基于意见:尝试在整个代码中保持缩进一致,这样可以更容易阅读。

将所有这些放在一起会为您提供以下代码:

#include <stdio.h>

#define cols 30

#define rows 30

int main()
{
    char initial_map[rows][cols];

    for(int i=0; i<cols; ++i)
    {
        for(int j=0;j<rows; ++j)
        {
            initial_map[i][j] = '.';
        }
    }
    return 0;
}

作为旁注,单行代码可以达到相同的效果:

char initial_map[30][30];
memset(initial_map, '.', sizeof(initial_map));

答案 1 :(得分:0)

将行intial_map[i][j] = .更改为intial_map[i][j] = '.'。这里没有定义没有引号的点,而不是char。

答案 2 :(得分:0)

如果您只想用点填充2D数组,那么您不必使用scanf函数,只需使用赋值运算符=

#include <stdio.h>


int main(void)
{
    int cols = 30;
    int rows = 30;

    int i;
    int j;

    char intial_map[30][30];

    for (i = 0; i < cols; i++)
    {
        for (j = 0; j < rows; j++)
        {
            intial_map[i][j] = '.';
            putchar(initial_map[i][j]);
        }
    }
    return 0;
}

请注意上面的代码不会NUL终止数组。