gpt4 book ai didi

c - 初始化数组

转载 作者:行者123 更新时间:2023-11-30 18:51:05 24 4
gpt4 key购买 nike

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

#include <stdio.h>

int cols = 30;
int rows = 30;
int i;
int j;

int main()
{

char intial_map[30][30];

for(char i=0; i<=cols; ++i)
{
for(char j=0;j<=rows; ++j)
{
intial_map[i][j] = .
scanf(“%d”, &intial_map[i][j]);
}
}
return 0;}

最佳答案

有几件事:

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

除此之外,您的 for 中存在一个相差一的错误环形。您需要使用<运算符作为终止条件而不是 <=运算符(operator)。通过使用“<=”运算符,for循环仍运行 i = 30但是,这超出了数组范围,并且可能会导致错误,因为 C 数组是从 0 索引的。此外,使用 char 也没有什么优势。计数器而不是 int柜台在 for环形。这也可能导致意外的整数溢出。

您正在重新定义ij ,它们是全局定义的,在您的 for 中循环初始化器。这在 C 语言中是允许的,但如果可能的话应该避免,因为它会造成困惑。您应该删除全局 ij ,或更改for循环,这样它们就不会声明新的计数器。

您的scanf()循环体中的调用没有任何意义,除非您尝试提示用户输入 map 数据。

您可以定义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));

关于c - 初始化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38174994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com