我遇到的问题可能是带有代码块的问题,但我只是想仔细检查一下是否有人发现我的代码有问题。我已经认为它与while循环有关。我一直得到一个" Main.exe已停止工作"错误。我个人在选项之间选择有很多困难,所以我试图制作一个快速而肮脏的C ++程序,在几个给定选项之间选择一个随机选项。这是我的代码:
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
cout << "Enter Options to choose between." << endl << endl;
int i;
string option;
do {
cin >> option[i];
i++;
}
while (cin != "done");
cout << option[ rand() %i ];
}
答案 0 :(得分:1)
您正在阅读每个cin的字符串,而不是字符,因此您的字符串不是您想要使用的字符串。
std::vector<std::string> options;
...
string in;
cin >> in;
options.push_back(in);
所以这里使用字符串向量而不是单个字符串,然后用字符串填充它。
答案 1 :(得分:1)
这个程序(带有嵌入式注释)应该做你想要的。
#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";
}