【问题标题】:While loop in C which genrates random numbers running for infinityC中的while循环生成无限运行的随机数
【发布时间】:2021-12-17 02:44:46
【问题描述】:

我想做一个程序,它生成2个随机坐标,然后它测试我之前制作的二维数组中的位置是否为空(数组中的值为0)。如果为真,则将值 2 置于该坐标,否则应继续寻找该位置。问题是它在某些情况下会无限运行。

这是我制作的数组:

int array[4][4] =
{
    {0,0,0,0},
    {0,0,0,0},
    {0,0,0,0},
    {0,0,0,0}
};

下面是剩下的代码:

srand(time(NULL));
int ranadom_num[2] = { rand() % 4, rand() % 4 };
while (array[ranadom_num[0]][ranadom_num[1]] != 0)
{
    int ranadom_num[2] = { rand() % 4, rand() % 4 };
}
array[ranadom_num[0]][ranadom_num[1]] = 2;

有什么帮助吗? :)

【问题讨论】:

  • 循环外定义的random_num 和循环内的random_num 是两个不同的对象。事实上,循环中的对象在每次迭代中都是不同的对象。
  • @EugeneSh 提到。一旦random_num 被选中,它将是无限循环或无循环。 here可以看到工作代码
  • @TruthSeeker 为什么不作为答案发布?

标签: arrays c random while-loop random-seed


【解决方案1】:

给定的代码中有两个变量,

int ranadom_num[2] = { rand() % 4, rand() % 4 }; //here 1

while (array[ranadom_num[0]][ranadom_num[1]] != 0)
{
    int ranadom_num[2] = { rand() % 4, rand() % 4 }; //here 2
}

所以,1 处选择的random_num 在循环内不会更改,2 处的random_num 没有用,因为它在给定范围内(即循环内)未使用。

在这里找到更新的代码,

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int
main ()
{
  int array[4][4] = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12},
    {0, 0, 0, 0}
  };

  srand (time (NULL));
  int ranadom_num[2] = { rand () % 4, rand () % 4 };
  while (array[ranadom_num[0]][ranadom_num[1]] != 0)
    {
      printf ("%d ", array[ranadom_num[0]][ranadom_num[1]]);
      ranadom_num[0] = rand () % 4;
      ranadom_num[1] = rand () % 4;
    }
  array[ranadom_num[0]][ranadom_num[1]] = 2;

  return 0;
}

您还需要注意array 中的值。至少有一个元素必须是zero 才能终止循环,否则将无限循环。

【讨论】:

    【解决方案2】:

    您在循环中重新声明ranadom_num,直到循环完成后才设置数组中的值,这就是您获得无限循环的原因。

    srand(time(NULL));
    int ranadom_num[2] = { rand() % 4, rand() % 4 };
    while (array[ranadom_num[0]][ranadom_num[1]] != 0)
    {
        //now there's a chance that the array will have a 2 in it
        array[ranadom_num[0]][ranadom_num[1]] = 2; 
        ranadom_num[0] = rand() % 4;
        ranadom_num[1] = rand() % 4;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 2017-06-22
      • 2015-04-15
      • 1970-01-01
      • 2023-02-06
      • 1970-01-01
      相关资源
      最近更新 更多