我正在尝试编写一个程序,该程序使用一个函数在用户提供的范围内生成10个随机数。它似乎工作正常,除了返回的数字都是1的事实:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int rand_int(int min, int max);
int main()
{
int min, max;
cout << "Hello user.\n\n"
<< "This program will generate a list of 10 random numbers within a
given range.\n"
<< "Please enter a number for the low end of the range: ";
cin >> min;
cout << "You entered " << min << ". \n"
<< "Now please enter a number for the high end of the range: ";
cin >> max;
while(min > max){
cout << "Error: Your low number is higher than your high number.\n"
<< "Please reenter your high number, or press ctrl + c
to end program.\n";
cin >> max;
cout << endl;
}
for(int i = 0; i < 10; i++){
int rand_int(int min, int max);
cout << rand_int << endl;
}
return 0;
}
int rand_int(int min, int max)
{
srand(time(0)); // Ensures rand will generate different numbers at different times
int range = max - min;
int num = rand() % (range + min);
return num;
}
答案 0 :(得分:4)
启用警告可能对此有所帮助,-Wall
标志gcc
告诉我们:
warning: the address of 'int rand_int(int, int)' will always evaluate as 'true' [-Waddress]
cout << rand_int << endl;
^
虽然clang
发出警告而无需添加标记。你在这里使用了一个函数指针,因为std::cout没有函数指针的overload,所以选择 bool 重载并将函数指针转换为{{1} }。电话应该是这样的:
true
虽然这不能完全解决您的问题,但您还需要移动:
std::cout << rand_int(min, max) <<std::endl;
在您的功能之外,最好在您的计划开始时。由于您非常快速地拨打srand(time(0));
十次,rand_int
的结果可能会相同,因此您将返回相同的time(0)
个数字。
这一行:
10
for循环中的只是函数的重新声明,不需要。
虽然,如果 C ++ 11 是使用random header的选项,那会更有意义,也更简单:
int rand_int(int min, int max);
如果 C ++ 11 不是一个选项,那么您至少应该查看How can I get random integers in a certain range? C FAQ条目,该条目提供以下公式,用于生成{{1}范围内的数字}:
M + rand()/(RAND_MAX /(N - M + 1)+ 1)
当然总有提升:
#include <iostream>
#include <random>
int main()
{
std::random_device rd;
std::mt19937 e2(rd());
std::uniform_int_distribution<int> dist(1,10);
for (int n = 0; n < 10; ++n) {
std::cout << dist(e2) << ", " ;
}
std::cout << std::endl ;
}
答案 1 :(得分:0)
尝试更改此内容:
for(int i = 0; i < 10; i++){
int rand_int(int min, int max);
cout << rand_int << endl;
}
为:
for(int i = 0; i < 10; i++){
int myRandomNumber = rand_int(int min, int max);
cout << myRandomNumber << endl;
}
您似乎在输出函数而不是它的返回结果。
答案 2 :(得分:0)
最快和最简单的方法来获取某个范围内的随机数是-
int lower=1,upper=10;//for example
srand(time(0));
int y = (rand() % (upper-lower + 1)) + lower;
它将为您提供-[1,10](包括两者)范围内的输出。
就是这样。干杯!