【问题标题】:Is this the right approach to add an element to an array?这是将元素添加到数组的正确方法吗?
【发布时间】:2020-07-08 09:46:46
【问题描述】:

我有一个数组。

int Game[100];

我想在这个数组中创建一个由两个数字组成的随机序列。 (0 和 1)。

int i;
int Game[];
for(i = 100; i >= pos; i--) {
       // Random number ( 0 or 1 )
       int v = (int)rand() / (int)RAND_MAX;
       Game[i] = Game[i-1];
       Game[i] = v;
}

这是正确的方法吗?

【问题讨论】:

  • 如果 Game 的大小为 100。带有 i == 100(循环的第一次迭代)的 Game[i] 将不在数组中。
  • 为什么是Game[i] = Game[i-1]?您最终将在下一行覆盖Game[i]。此外,i 应从 99 开始,因为 Game[100] 不指代有效位置
  • pos 的值是什么?
  • int Game[]; ?
  • 关于:int v = (int)rand() / (int)RAND_MAX; 这不太可能产生你想要的东西。建议:int v = rand() % 2;,因为每次执行此语句都会导致 10

标签: c for-loop random


【解决方案1】:

如果您想用连续的随机 0 和 1 值填充 Game 数组,您可以执行以下操作:

#include <stdio.h>
#include <stdlib.h>
#include <time.h> /* include this if you want to create new sequences at each run */

int main()
{
    
    int Game[100];

    /* create a new seed based on current time to have different sequences at each run */  
    srand( (unsigned int)time( NULL );

    int i;
    for(i = 0; i < sizeof(Game)/sizeof(Game[0]);i++) {
       
       // Random number ( 0 or 1 )
       Game[i] = rand() % 2;
    }

    for(i = 0; i < sizeof(Game)/sizeof(Game[0]);i++) {
        printf ("%d\n",Game[i]);
    }
}

【讨论】:

  • 记住需要设置一个唯一的“种子”值,否则每次执行都会产生相同的值。建议插入#include &lt;time.h&gt; 和早期main() 插入:srand( (unsigned int)time( NULL );
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
  • 2020-08-14
  • 2019-04-06
相关资源
最近更新 更多