我需要创建一个空的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>
答案 0 :(得分:2)
有几件事:
您需要确保引用您的文字。在这种情况下,编译器正在查看您的.
作为结构成员运算符。您需要将其用单引号括起来(双引号用于字符串文字),以通知编译器它是文字而不是操作符。此外,您需要使用分号终止语句。
除此之外,您的for
循环中出现了一个错误。您需要使用<
运算符作为终止条件而不是<=
运算符。通过使用'&lt; ='运算符,for
循环仍然为i = 30
运行,但是,这超出了数组边界并且可能导致错误,因为C数组是0索引的。此外,在char
循环中使用int
计数器而不是for
计数器也没有什么好处。这也可能导致意外的整数溢出。
您正在i
循环初始值设定项中重新定义全局定义的j
和for
。这在C中是允许的,但如果可能的话应该避免,因为它令人困惑。您应该删除全局i
和j
,或更改for
循环,以便它们不会声明新计数器。
除非您尝试提示用户输入地图数据,否则循环体中的scanf()
调用毫无意义。
您可以将rows
和cols
定义为预处理器宏,以便在编译时轻松调整它们。
更多基于意见:尝试在整个代码中保持缩进一致,这样可以更容易阅读。
将所有这些放在一起会为您提供以下代码:
#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终止数组。