我正在创建一个小程序,允许用户输入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()
总是在同一系统上提供相同的输出?
答案 0 :(得分:2)
在评论中进行了一些讨论后,很明显问题是我不是seeding rand()
函数。以下是无法正常运行的代码的一部分。
(另外,作为旁注,要使用time()
功能,必须包含<ctime>
或<time.h>
。)
srand(time(NULL));
int name = rand() % 3;
cout << names[name];
(感谢@ manni66指出包含过于复杂的计算以获得rand()
的范围是没有用的,因为它只需要是一个整数。
答案 1 :(得分:1)
播种当前时间有效:
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <cstdio>
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);
srand(time(NULL)); // use current time as seed for random generator
int name = rand() % 3 ;
printf(" random %i \n", name);
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;
}
}