if语句执行的时候它不应该(有点)

时间:2017-04-15 16:35:49

标签: c++ if-statement while-loop

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.我不知道&#39;得到它。它应该一起跳过语句,而不是仅跳过第一行。 Netbeans告诉我,我的括号是正确的,所以它不应该是属于if和属于while的赋值的赋值问题。

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

enter image description here

此输出放置了2棵树。

1 个答案:

答案 0 :(得分:1)

你走过每个坐标。

如果它位于边缘,则放置'W'。然后你随机放置一棵树'T'

然后进入下一个坐标。

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

在放置树之前完成所有墙。考虑一种更有效的方法来放置墙壁,比如做每个边缘而不是loopimg在中间abd什么也不做。