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

时间:2015-01-12 17:00:33

标签: c++ input types cin

我试图从用户那里得到一个整数,但如果他们输入“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;
    }
}

如何在没有持续错误的情况下执行此操作?谢谢!

1 个答案:

答案 0 :(得分:5)

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) ...

如果输入失败,请阅读无法解析为整数的内容并将其丢弃,然后重试。