C ++如何在不破坏程序的情况下输入用户值

C++ How to enter user values without breaking program

我正在尝试从用户那里获取一个整数,但如果他们键入 "ckefkfek",它将导致程序出现垃圾邮件并中断。我也希望他们输入一个浮点数,但我遇到了同样的问题,不知道如何检查这个。

int option = 0;
while (option != 3)
{
    cout << "Enter 1, 2, or 3: ";
    cin >> option;
    switch (option)
    {
        case 1:
            cout << "Enter a float: ";
            float myfloat;
            cin >> myfloat;
            myFunc(myfloat); // must be a float for this function to work.
            break;
        case 2:
            // do stuff
            break;
        case 3:
            // do stuff
            break;
        default:
            cout << endl << "Not a valid option." << endl;
            break;
    }
}

我怎样才能做到这一点而不会经常出错?谢谢!

bool input_ok = false;
while (!input_ok)
{
  cout << "Enter 1, 2, or 3: ";
  if (cin >> option)
  {
    input_ok = true;
    ...
  }
  else
  {
    cout << "Stop being silly\n";
    std::string dummy;
    if (cin >> dummy)
      cin.clear();
    else
      throw std::runtime_error("OK, I'm not playing any more");
  }
}

基本上如果输入可以失败,就需要测试是否失败。您可以通过使用 cin >> option; if (cin) ... 读取流后检查流的状态来测试它,或者像这样组合读取和测试:if (cin >> option) ...

如果输入失败,读取任何无法解析为整数的内容并丢弃,然后重试。