如何从随机数字中取名?

时间:2010-04-28 01:58:51

标签: c++ random

我的程序创建了一个可以有a-z的随机名称,这个代码生成一个16个字符的名字但是 :(我的代码不会使名称和idk为什么:(谁能告诉我这有什么问题?

char name[16];
void make_random_name()
{

  byte loop = -1;

  for(;;)
  {
      loop++;

      srand((unsigned)time(0));
      int random_integer;

      random_integer = (rand()%10)+1;

      switch(random_integer)
      {
      case '1': name[loop] = 'A';
          break;
      case '2': name[loop] = 'B';
          break;
      case '3': name[loop] = 'C';
          break;
      case '4': name[loop] = 'D';
          break;
      case '5': name[loop] = 'E';
          break;
      case '6': name[loop] = 'F';
          break;
      case '7': name[loop] = 'G';
          break;
      case '8': name[loop] = 'Z';
          break;
      case '9': name[loop] = 'H';
          break;
      }

      cout << name << "\n";

      if(loop > 15)
      {
          break;
      }

  }


 }

4 个答案:

答案 0 :(得分:4)

random_integer是一个整数,您将它与ASCII字符集中的一串字符进行比较 - '1',因为字符文字实际上是十进制的49。由于49不在您的随机数范围内,因此它永远不会被击中。

尝试将您的案例陈述更改为

case 1: ...

而不是

case '1': ...

答案 1 :(得分:2)

srand((unsigned)time(0));

for循环中取出它,你只需要播种一次。

case '1':

1并不意味着整数1,而是字符1将(ascii)转换为整数49。 将其更改为 -

case 1 :

答案 2 :(得分:2)

或者只是使用

char name[16];
for (i = 0; i < sizeof name; ++i) {
  name[i] = "ABCDEFGHIJ"[rand() % 10];
}

答案 3 :(得分:0)

这有很多错误,我会列出它们:

  1. 您不会终止字符串。
  2. 您不必要使用switch语句来获取可以通过数组索引轻松完成的数据。
  3. 您正在循环调用srand
  4. for(;;) { i++ ... - 真的吗?