这个程序(嵌入评论)应该做你想做的。
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <string>
#include <vector>
using std::cin;
using std::cout;
using std::string;
using std::vector;
我用我想从std
命名空间导入名称的显式列表,因为我不知道什么其他名字的定义有(有可能超过1000),我真的只需要这几。
int main()
{
std::srand(std::time(NULL));
上述语句初始化随机数生成器,因此在程序的每次运行中都不会得到相同的“随机”数。
cout << "Enter options to choose between, an empty line to finish:\n";
我将"done"
更改为空字符串,因为这样更容易输入。此外,这里不需要std::endl
。你应该写"\n"
,它更短,在大多数情况下等价。
vector<string> options;
这些是到目前为止输入的所有选项。每个选项都是string
,并且vector
可以容纳很多元素,所以这些字符串很多。
for (string option; std::getline(cin, option) && option != "";) {
options.push_back(option);
}
此代码读取选项。变量option
仅用于读取选项。之后,它不再需要。 for
循环会自动限制option
变量的范围,因此它只能在for
循环中使用。
我还将cin >> option
更改为getline(cin, option)
以允许包含空格的选项。
cout << "You entered the following options:\n";
for (std::size_t i = 0; i < options.size(); i++) {
cout << "* " << options[i] << "\n";
}
cout << "Your random option is " << options[std::rand() % options.size()] << "\n";
}
在你心中,'option [i]'是什么? – 2014-10-26 21:37:44
好'cin >>选项[i]'是错误的,因为字符串是空的,'i'是未初始化的。你想做什么_exactly_? – 2014-10-26 21:37:49
'i'是未初始化的,因此基本上是一个随机的,可能非常大的值。 'option'只是一个'string',最初是空的。 'option [i]'是'option'的* ith *字符,其类型是'char'。 'cin >>选项[i]'因此读取单个字符并尝试将其存储在空字符串中的任意位置(因此崩溃;试图写入存储器中的某个奇怪位置)。这可能不是你想要做的。你的代码应该反映你实际想要做的事情。电脑相对精确地遵循您的指示。代码你的意思! – 2014-10-26 22:03:16