【发布时间】:2017-06-13 21:31:05
【问题描述】:
我创建了一个简单的游戏,让用户猜测一个从 1 到 10 的随机数。它运行良好,然后我将它调整到我创建一个函数的位置,该函数接受 2 个参数,一个高值和一个低值,以生成随机数数字。当它应该返回一个随机数时,通过函数执行此操作总是返回作为参数输入的最大数字的值。这是我的代码:
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
int main(void) {
int storedNum, low, high, userGuess;
printf("Welcome to my random numbers game! You will choose a lower number and a maximum number and me, the computer, will choose a random number between those two values for you to guess.\n\nFirst, choose the lowest value");
scanf("%d", &low);
printf("Now, choose the highest value");
scanf("%d", &high);
storedNum = randomNumbers(low, high);
printf("We have guessed a number between %d and %d. Guess our number!: ", low, high);
scanf("%d", &userGuess);
while (userGuess != storedNum){
if(userGuess < storedNum){
printf("higher!: ");
scanf("%d", &userGuess);
}
else{
printf("Lower!: ");
scanf("%d", &userGuess);
}
}
printf("You are correct the number was %d!", storedNum);
return 0;
}
int randomNumbers(int maxNum, int minNum){
int number;
srand(time(NULL));
number = rand()%maxNum + minNum;
return number;
}
只要我在 main 方法中生成随机数,代码就可以正常工作,但是每当我通过函数使用它时,我总是得到相同的返回值。我认为问题在于函数内部的种子,但我并不完全确定。即使这是问题所在,我也不确定如何解决这个问题并让我的代码正常工作。
基本上,我正在尝试编写一个可以在其他程序中重复使用的函数,以生成 x 和 y 之间的随机数。
这里是一些示例输出:
Welcome to my random numbers game! You will choose a lower number and a maximum number and me, the computer, will choose a random number between those two values for you to guess.
First, choose the lowest value 1
Now, choose the highest value 10
We have guessed a number between 1 and 10. Guess our number!: 5
higher!: 8
higher!: 9
higher!: 10
You are correct the number was 10!
无论我输入什么数字,它总是返回最大值(在本例中为 10)。在此先感谢您提供的所有帮助,希望这篇文章对您有帮助。
【问题讨论】:
-
不要在函数中设置随机种子。它不会增加任何额外的随机性。在
main中执行一次。 -
可能不是问题的根本原因,而是:
randomNumbers(low, high);-->randomNumbers(high, low);。或者交换函数定义中的参数顺序。 -
我已经尝试过了,但仍然遇到同样的问题,抱歉应该也把它放在帖子中,将编辑。我尝试在调用函数之前放置种子,但它仍然产生相同的结果。不过谢谢。
-
@kaylum 我觉得自己像个白痴。当然,我忽略了这么简单的事情。非常感谢您的帮助,这实际上是唯一错误的地方,非常感谢您发现我的愚蠢。
-
此代码应生成缺少原型的警告。不要写古老的 C!