gpt4 book ai didi

c++ - if 语句在不应该执行的时候执行(有点)

转载 作者:行者123 更新时间:2023-11-28 05:11:29 32 4
gpt4 key购买 nike

int trees = 3;
int tree_x, tree_y;
for(int r = 0; r < m_townsize; r++)
{
for(int c = 0; c < m_townsize; c++)
{
if(r == 0 || c == 0 || r == (m_townsize - 1) || c == (m_townsize - 1))
m_town[r][c] = 'W';
while(trees > 0)
{
tree_x = random() % m_townsize;
tree_y = random() % m_townsize;
cout << tree_y << "," << tree_x << endl;
if(m_town[tree_y][tree_x] == ' ')
{
m_town[tree_y][tree_x] = 'T';
trees -= 1;
}
}
}
}

根据我写的代码,如果树的坐标处有一个空格字符,应该放置一棵树,并将树数减1。

如果那里没有空间,它应该跳过放置一棵树,因此不会递减。这应该使其选择另一组坐标并再次运行。

但是,如果您查看此特定输出,它会运行到 if 语句,跳过第一个选项以将其替换为 T——因为它是 W——但仍然递减 1。我不明白它。它应该一起跳过语句,而不是只跳过第一行。 Netbeans 告诉我我的括号是正确的,所以属于 if 的赋值和属于 while 的递减应该不是问题。

如果我做一个 do-while 循环,它会放置一大堆。我不知道发生了什么。

enter image description here

这个输出放置了 2 棵树。

最佳答案

您正在遍历每个坐标。

如果它在边缘你放一个'W'。然后你随机放置一棵树 'T'

然后你继续下一个坐标。

这意味着您可以在用 'W' 覆盖之前将一些树放在正方形中。

在放置树木之前完成所有墙壁。考虑一种更有效的方式来放置墙壁,比如做每条边,而不是在中间 abd 上循环,什么都不做。

关于c++ - if 语句在不应该执行的时候执行(有点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43428522/

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