【发布时间】:2022-06-10 17:43:34
【问题描述】:
我创建了一个简单的随机数程序,它接受 5 个输入并输出不同的随机数。
用户可以输入 5 个元音,不考虑大小写,函数会根据输入计算一个随机数。
可能的收入:a A a A e
可能的结果:1 2 3 19 25
问题:当我多次输入同一个元音时,我没有得到不同的数字,但是当我设置断点并在调试器模式下运行我的代码时,情况就不一样了
以下是我的代码
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
using namespace std;
int createRandomFromChar(char inputChar);
int main()
{
char answer;
char inputOne, inputTwo, inputThree, inputFour, inputFive;
cout << endl <<
"This program plays a simple random number guessing game." << endl;
do
{
cout << endl << "Enter 5 vowel characters (a,e,i,o,u or A,E,I,O,U) separated by spaces: ";
cin >> inputOne >> inputTwo >> inputThree >> inputFour >> inputFive;
cin.ignore();
int randomNumberOne = createRandomFromChar(inputOne);
int randomNumberTwo = createRandomFromChar(inputTwo);
int randomNumberThree = createRandomFromChar(inputThree);
int randomNumberFour = createRandomFromChar(inputFour);
int randomNumberFive = createRandomFromChar(inputFive);
cout << "The random numbers are " << left <<
setw(3) << randomNumberOne << left <<
setw(3) << randomNumberTwo << left <<
setw(3) << randomNumberThree << left << setw(3) << randomNumberFour
<< left << setw(3) << randomNumberFive;
cout << endl << "Do you want to continue playing? Enter 'Y' or 'y' to continue playing: "
<< endl;
answer = cin.get();
cin.ignore();
}
while ((answer == 'y') || (answer == 'Y'));
}
int createRandomFromChar(char inputChar)
{
srand(time(0));
int n1 = 1 + (rand() % 20);
int n2 = 21 + (rand() % 20);
int n3 = 41 + (rand() % 20);
int n4 = 61 + (rand() % 20);
int n5 = 81 + (rand() % 20);
if ((inputChar == 'a') || (inputChar == 'A'))
{
return n1;
}
else if ((inputChar == 'e') || (inputChar == 'E'))
{
return n2;
}
else if ((inputChar == 'i') || (inputChar == 'I'))
{
return n3;
}
else if ((inputChar == 'o') || (inputChar == 'O'))
{
return n4;
}
else if ((inputChar == 'u') || (inputChar == 'U'))
{
return n5;
}
else
{
return 0;
}
}
【问题讨论】:
-
这能回答你的问题吗? srand() — why call it only once?
-
time(0)以秒为单位返回时间。在一秒钟内多次调用它会产生相同的种子和相同的随机序列。当您放置断点时,您会强制增加时间间隔,因此您将获得不同的种子。底线:您应该在调用createRandomFromChar之前将srand(time(0));放入main()。 -
甚至比修复
srand更好——在 C++ 中,建议使用实用程序。请参阅:en.cppreference.com/w/cpp/numeric/random。
标签: c++