C ++ rand()不使用字符串数组

时间:2018-01-05 11:45:19

标签: c++ random

我正在创建一个小程序,允许用户输入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()总是在同一系统上提供相同的输出?

2 个答案:

答案 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;
    }
}