我正在创建一个允许用户输入 3 个名称(或他们想要的任何字符串)的小程序。然后程序应该显示所有三个字符串(这是有效的),然后它应该使用 rand()
函数随机显示三个字符串之一。这是功能不正常的部分。
#include <iostream>
#include <string>
using namespace std;
void display(string[], int);
const int SIZE = 3;
int main()
{
string names[SIZE];
for (int i = 0; i < SIZE; i++)
{
cout << i + 1 << ": ";
getline(cin, names[i]);
}
cout << endl;
display(names, SIZE);
int name = rand() % (2 + 1 - 0) + 0;
cout << names[name];
cin.get();
return 0;
}
void display(string nm[], int n)
{
int i = 0;
for (i; i < n; i++)
{
cout << "Name " << i + 1 << ": ";
cout << nm[i] << endl;
}
}
我之前有不同的设置,它给了我一个错误,但是在将它更改为现在的样子之后,它总是给我最后一个元素 [2]。
这是代码错误,还是只是 rand()
在同一系统上总是给出相同的输出?
最佳答案
在评论中进行了一些讨论后,很明显问题是我不是 seeding rand()
功能。以下是部分未运行的代码,已更正。
(另外,作为旁注,要使用 time()
函数,必须包含 <ctime>
或 <time.h>
。)
srand(time(NULL));
int name = rand() % 3;
cout << names[name];
(感谢 @manni66 指出包含过于复杂的计算以获得 rand()
的范围是没有用的,因为它必须是一个整数。
关于C++ rand() 不适用于字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48112992/