极其简单的代码带来的悲伤

Grief with Extremely Simple Code

本文关键字:代码 简单      更新时间:2023-10-16

我遇到的问题可能是代码块的问题,但我只想仔细检查一下,看看是否有人看到我的代码有问题。我已经认为这与while循环有关。我一直收到一个"Main.exe已停止工作"的错误。I、 就我个人而言,在选择选项之间有很多困难,所以我试图制作一个快速而肮脏的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 ];
}

这个程序(带有嵌入的注释)应该做你想做的事情。

#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";
}

您读取的是每个cin的字符串,而不是字符,所以您的字符串不是您想要使用的。

std::vector<std::string> options;
...
    string in;
    cin >> in;
    options.push_back(in);

所以这里使用一个字符串向量,而不是单个字符串,然后用字符串填充它。