這個程序(嵌入評論)應該做你想做的。
#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