随机填充向量始终返回相同的数字

时间:2018-06-13 15:28:36

标签: c

我在C中是全新的,并尝试使用随机整数填充向量并在之后输出。但是,似乎向量总是用相同的数字填充。我需要更改哪些才能真正获得随机付款?没有限制,数量应该只在long的值范围内。这是我的代码:

    #include "stdafx.h"
    #include <stdlib.h>
    #include <stdio.h>
    #include <vector>
    #include <time.h>

int main()
{
    long x = 20;
    long y = 12;
    std::vector<long> entries;

    //initialize simple random number generator using current time
    srand(time(NULL));

    for (int step = 0; step < x; step++) {      
        entries.push_back(rand());
        ++entries[step];
    }

    for (std::vector<long>::const_iterator i = entries.begin(); i != entries.end(); ++i) {
        printf("%ld\n", i);
    }       

    return 0;
}

编辑: 我想用普通的C而不是c ++来解决这个问题!

2 个答案:

答案 0 :(得分:1)

代码中的主要问题在于您的上一个循环

for (std::vector<long>::const_iterator i = entries.begin(); i != entries.end(); ++i) {
    printf("%ld\n", i);
}  

您不是从矢量打印值,而是指向它的迭代器

将循环内的行更改为printf("%ld\n", *i);以修复它。

更好的是,您可以使用范围循环使其更加简单

for(auto& number : entries){
std::cout<<number<<'\n'; //or printf("%ld\n",number), like in your code
}

答案 1 :(得分:1)

如果您希望您的解决方案是纯C,则需要使用数组而不是向量。

我在这里缺少一些信息,但是使用srand()和rand()的基本C程序看起来像这样:

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

#define NB_ENTRIES (20)
#define RANDOM_MAX_RANGE (50) // you should update that

// Don't use srand(time(NULL)) because if you start many time this
// program too quickly, you'll have the same values in all instances.
void Randomize(void)
{
  struct timeval time; 
  gettimeofday(&time,NULL);
  srand((time.tv_sec * 1000) + (time.tv_usec / 1000));
}

// Returns a value between 0 and toNumber-1
// Thanks to Bathsheba for pointing out an error with my first version.
int RandomInt(int toNumber)
{
  return (int)(rand()/(RAND_MAX + 1.0) * toNumber);
}

// This better but slower version of RandomInt() will ensure
// an even distribution of random values if toNumber is
// greater than around three quarter of RAND_MAX
// NOTE : toNumber must be between 0 and RAND_MAX.
int BetterRandomInt(int toNumber)
{
  const int randomSize = RAND_MAX / toNumber;
  int returnValue;
  do 
  {
    returnValue = rand() / randomSize;
  }
  while (returnValue >= toNumber);

  return returnValue;
}

int main(void)
{
  int entries[NB_ENTRIES];
  int step;

  Randomize();

  for (step = 0; step < NB_ENTRIES; step++)
  {
    entries[step] = RandomInt(RANDOM_MAX_RANGE);
    // entries[step] = BetterRandomInt(RANDOM_MAX_RANGE);
  }

  for (step = 0; step < NB_ENTRIES; step++)
  {
    printf("%d\n", entries[step]);
  }       

  return 0;
}

请注意,我使用的是固定数量的条目。您可以使用指针和malloc()使您的数组动态化。如果您需要,请发表评论,但我觉得这超出了问题的范围。