如何在C++中将用户输入验证为double?

Hri*_*sto 18 c++ validation double cin

我如何检查输入是否真的是双倍的?

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...
Run Code Online (Sandbox Code Playgroud)

上面的代码无限输出Invalid Input!语句,因此它不会提示输入其他内容.我想提示输入,检查它是否合法...如果它是双,继续......如果它不是双,再次提示.

有任何想法吗?

cas*_*nca 14

试试这个:

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
  }
}
Run Code Online (Sandbox Code Playgroud)

这基本上清除了错误状态,然后读取并丢弃在前一行输入的所有内容.

  • 而不是`while(cin.get()!='\n');`,我只使用`cin.sync();`.在我看来,它更具可读性. (3认同)
  • 当我尝试这个例子时,@ chaosTechnician,cin.sync()对我不起作用.while(cin.get()!='\n'); 虽然.知道为什么吗? (2认同)