как я проверяю ввод данных пользователем как двойное в C++?

Как я проверил бы, является ли вход действительно двойным?

double x;

while (1) {
    cout << '>';
    if (cin >> x) {
        // valid number
        break;
    } else {
        // not a valid number
        cout << "Invalid Input! Please input a numerical value." << endl;
    }
}
//do other stuff...

Вышеупомянутый код бесконечно производит Invalid Input! оператор, таким образом, не запрос другого входа. Я хочу запросить вход, проверить, законно ли..., если это - двойное, продолжите..., если это не двойное, быстрое снова.

Какие-либо идеи?

18
задан Hristo 18 July 2010 в 01:47
поделиться

3 ответа

Попробуйте следующее:

while (1) {
  if (cin >> x) {
      // valid number
      break;
  } else {
      // not a valid number
      cout << "Invalid Input! Please input a numerical value." << endl;
      cin.clear();
      while (cin.get() != '\n') ; // empty loop
  }
}

Это в основном очищает состояние ошибки, затем читает и отбрасывает все, что было введено в предыдущей строке.

14
ответ дан 30 November 2019 в 09:18
поделиться

failbit будет установлен после использования оператора извлечения, если произошла ошибка синтаксического анализа, есть пара простых тестовых функций good и fail ] ты можешь проверить. Они полностью противоположны друг другу, поскольку обрабатывают eofbit по-разному, но в данном примере это не проблема.

Затем вы должны очистить бит отказа перед повторной попыткой.

Как говорит Касабланка, вы также должны отбросить нечисловые данные, все еще оставшиеся во входном буфере.

Итак:

double x;

while (1) {
    cout << '>';
    cin >> x;
    if (cin.good())
        // valid number
        break;
    } else {
        // not a valid number
        cout << "Invalid Input! Please input a numerical value." << endl;
        cin.clear();
        cin.ignore(100000, '\n');
    }
}
//do other stuff...
1
ответ дан 30 November 2019 в 09:18
поделиться

Один из способов - проверить равенство чисел с плавающей запятой.

double x;

while (1) {
    cout << '>';
    cin >> x;
    if (x != int(x)) {
        // valid number
        break;
    } else {
        // not a valid number
        cout << "Invalid Input! Please input a numerical value." << endl;
    }
}
0
ответ дан 30 November 2019 в 09:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: