【问题标题】:Random Numbers in C Through a Function (Beginner Programmer)C 中的随机数通过函数(初级程序员)
【发布时间】: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!

标签: c function random


【解决方案1】:

rand() 非常简单

【讨论】:

  • 对,我只是想弄清楚为什么它的行为在 main 方法和函数中不一样。
【解决方案2】:
 rand()%maxNum + minNum;

rand () 将生成一个介于0RAND_MAX 之间的数字。

rand%maxNum 将是一个数字&lt;= min(rand(),maxNum-1)

所以你得到的数字是&lt;=min(rand(),maxNum-1) + minNum,它可能超过maxNum

  • 要在 MIN 和 MAX 之间获得正确的随机数,最好坚持这个公式:

    (rand() % (MAX - MIN + 1)) + MIN;

【讨论】:

  • 感谢这个公式,我在处理更大的数字时遇到了问题,但是,我的实际问题在于我在调用函数时将参数放在错误的位置。这么简单的东西哈!非常感谢这个公式,虽然会派上用场!
猜你喜欢
  • 1970-01-01
  • 2022-06-10
  • 2016-05-15
  • 2018-09-26
  • 2017-06-23
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多