悲伤与极其简单的代码

时间:2014-10-26 21:34:14

标签: c++ while-loop cin

我遇到的问题可能是带有代码块的问题,但我只是想仔细检查一下是否有人发现我的代码有问题。我已经认为它与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 ];

}

2 个答案:

答案 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";
}