Эта программа (со встроенными комментариями) должна делать то, что вы хотите.
#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]'? –
Ну 'cin >> option [i]' неверно, так как строка пуста и 'i' не инициализирована. Что именно ты пытаешься сделать? –
'i' неинициализирован и поэтому по существу является случайным, вероятно, очень большим значением. 'option' - это всего лишь одна строка и изначально пуста. 'option [i]' является символом * ith * 'option', его тип -' char'. Параметр 'cin >> [i]' поэтому считывает один символ и пытается сохранить его в произвольной позиции в пустой строке (следовательно, сбой, попытка записать в какое-то странное место в памяти). Это, вероятно, не то, что вы хотите сделать. Ваш код должен отражать то, что вы на самом деле пытаетесь сделать. Компьютеры точно следуют вашим инструкциям. Код, что вы имеете в виду! –