传递参数、参数、交换函数和随机数生成器

Passing arguments, parameters, swap function and a random number generator

本文关键字:参数 随机数生成器 函数 交换      更新时间:2023-10-16

我正在尝试创建一个随机数生成器,该生成器首先交换最小值和最大值,然后再次交换它们(回到原始状态?我的另外两个问题是:我如何判断交换是否实际发生(因为它似乎是一个不可见的过程),并且无论选择哪两个值作为最小值和最大值,随机数输出始终为 1。

#include <string>
#include <cstdlib>
#include <iostream>
using namespace std;
int minimum;
int maximum;
//Swap function
void swap (int& minimum, int& maximum) {
minimum = maximum;
maximum = minimum;
}

int randomNumber;
//Random number generator
void randomNum() {
minimum = minimum;
maximum = maximum;
srand(time(NULL));
randomNumber = rand() % maximum + minimum;
cout<<"Your random value is: " << randomNum;
}

int main() {
cout<<"Please enter your minimum value: " << endl;
cin>>minimum;
cout<<"Please enter your maximum value: " << endl;
cin>>maximum;
swap (minimum, maximum); //Calling swap function
randomNum(); //Needs to swap again somehow.
}

代码中存在大量问题:

  • 如果在用maximum覆盖之前不保存minimum的值,则无法进行交换:该值丢失,并且在第二次分配时两者都具有相同的值(这是maximum)
  • 为自己赋值没有任何意义,我不明白它的目的(例如minimum = minimum)
  • 运算符优先级使rand() % maximum + minimum解析为(rand() % maximum) + minimum,这可能不是您想要的
  • 如果要在区间之间生成随机数,则必须使用区间边界之间的差值,而不是其总和,例如rand() % (x - y)来获得范围[x, y)
  • 在本地调用srand(time(NULL))randomNum()将重置生成器,如果在同一秒内多次调用该函数
  • 我不明白交换值以再次交换它们的整个目的,您是否需要对它们进行排序以使较小的值始终存储在minimum中还是什么?