我正在尝试制作一个程序以生成2个随机数并将其打印到屏幕上。这是通过两次调用Numbers函数并将值分配给num1和num2,然后也使用这些变量两次调用PrintMsg来实现的,但是该函数将第一个值打印两次。
在调试器中,将num1和num2设置为2个不同的数字,并且已将模式变量成功传递给PrintMsg函数。
// C program to generate random numbers
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include<time.h>
int Numbers() {
bool valid = false;
int randNum;
srand(time(0));
while(valid != true) {
randNum = rand() % 100;
if (randNum > 0 && randNum <= 6) {
valid = true;
}
}
return(randNum);
}
void PrintMsg(int x, int mode) {
if (mode == 1) {
switch(x) {
case 1:
printf(" %d ", x);
break;
case 2:
printf(" %d ", x);
break;
case 3:
printf(" %d ", x);
break;
case 4:
printf(" %d ", x);
break;
case 5:
printf(" %d ", x);
break;
case 6:
printf(" %d ", x);
break;
}
}
else if (mode == 2){
switch(x) {
case 1:
printf(" %d ", x);
break;
case 2:
printf(" %d ", x);
break;
case 3:
printf(" %d ", x);
break;
case 4:
printf(" %d ", x);
break;
case 5:
printf(" %d ", x);
break;
case 6:
printf(" %d ", x);
break;
return;
}
}
int main(void)
{
int num1;
int num2;
num1 = Numbers();
PrintMsg(num1, 1);
num2 = Numbers();
PrintMsg(num2, 2);
return 0;
}
谢谢。
答案 0 :(得分:2)
您正在使用srand()
返回的当前时间,在每次对Numbers()
的调用中使用time()
重新填充随机数生成器。现在time()
返回以秒为单位的时间,因此,如果您在同一秒内两次调用Numbers()
,则将具有相同值的生成器作为种子,从而得到rand()
返回的相同值。
您应该在程序开始时只调用一次srand(time(0))
。
正如乔·布莱克爵士在评论中指出的那样,当您在调试器中运行代码时,您可能在连续两次调用Number()
之间等待了超过一秒钟,这就是为什么您没有看到这种行为的原因情况。