string quotes[2];
quotes[0] = "This is number one";
quotes[1] = "this is two";
quotes[2] = "and three";
cout << quotes[rand() % 2] << " " << endl;
cout << endl;
大家好,
我正在努力使它在数组中输出一个随机字符串。
我对c ++很新,这对我来说是正确的。但是在运行时,我得到1然后显示0?
答案 0 :(得分:4)
问题是您的阵列没有足够的空间:
string quotes[2];
表示有效索引为0
和1
。索引2
已超过数组的末尾。
当您打算初始化数组的所有元素时,可以跳过其维度,如下所示:
string quotes[] = {
"This is number one"
, "this is two"
, "and three"
};
此外,如果您想获得介于0和2之间的随机数,请使用%3
代替%2
:
cout << quotes[rand() % 3] << " " << endl;
cout << endl;
答案 1 :(得分:1)
你声明字符串引号[2],字符串引号[2]将超出数组范围。它应该是字符串引号[3]或者你只是注释//引号[2] =“和三”;因为rand()%2永远不会访问引号[2]。
答案 2 :(得分:1)
声明你的数组有3个元素
string quotes[3];
并将您的索引器更改为具有击中所有3个元素的可能性
...quotes[rand() % 3]...
答案 3 :(得分:0)
我对c ++很新,这对我来说是正确的。
好的,让我告诉你一些事情:在C ++中我们不使用C风格的数组。期。如果你真的想要固定大小的数组,请使用std::array
。如果您想要更具动感的内容:使用std::vector
。如果您想要bool
的固定大小数组,请使用std::bitset
,如果您想要动态,请使用boost::dynamic_bitset
。
但是当跑步时,我得到1然后显示0?
你当然可以。 %
(模数)运算符将返回左侧和右侧之间的除法的余数。例如:3 % 2 = 1
和2 % 2 = 0
。在您的示例中,由于2 % 2 = 0
,rand() % 2
将始终返回0
或1
(从不2
);这是完美的,因为您的数组只包含索引0
和1
的两个元素。
如果您的意思是在2
nd索引之前有一个数组,那么您打算声明一个包含3个项目的数组:
std::array<std::string, 3> quotes;
然后将“randomizer”定义为:
std::cout << quotes[rand() % 3] << " " << std::endl;
另外,请看一下this answer,它将指出您使用rand()
使用模数运算符的缺陷,以及如何修复它们。
答案 4 :(得分:0)
您的数组设置为包含2个元素,但为其分配了3个元素。另外,你有rand()生成2个值(0和1)而不是所需的三个值。 (0,1和2)我不确定这对你是否有问题,但rand()没有播种,因此每次都会生成相同的数字顺序。您的代码的可能修订如下:
#include <ctime>
string quotes[3];
quotes[0] = "This is number one";
quotes[1] = "this is two";
quotes[2] = "and three";
srand(time(NULL)); //Seed the rand();
cout << quotes[rand() % 3] << " " << endl;
cout << endl;
希望这会有所帮助。