我的程序创建了一个可以有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;
}
}
}
答案 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)
这有很多错误,我会列出它们:
switch
语句来获取可以通过数组索引轻松完成的数据。srand
。for(;;) { i++
... - 真的吗?