在c ++中验证double

时间:2013-07-19 16:17:47

标签: c++ validation double

我对编码完全不熟悉,所以请在评论之前记住这一点。

所以我一直想尝试编码一段时间,今天我去了图书馆 并拿起一本名为“用c ++编程”的书。我写了一些基本的程序, 但我一度陷入困境,我不知道如何创建一个功能 确保当提示用户输入double时,他们输入的内容是有效的。 (如果用户输入像'k'这样的字符,程序就会中断)。 我在这里和网上搜索,有一些答案,但他们更多 “这是一行有效的代码行,将x,y,z插入其中”。我没有 有足够的经验知道该怎么做。所以这是一个混合代码的示例 从另一个问题,我没有尝试使其在我的程序中工作:

#include <iostream>
#include <stdio.h>


using namespace std;

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

现在我想要它做的是使用“cin&lt;&lt; x”获取x的用户输入,并且 然后确保x是双倍的,我在这方面做得很难。如果 有人可以用澄清每项操作的方式解释这一点, 我真的很感激。例如,我不知道break函数的作用, 以及cin.clear()和cin.get()的作用。 (我知道这是重复的,但是 关于另一个问题的答案根本没有解决我困惑的问题, 感谢您花时间阅读和阅读回答这个! :)

4 个答案:

答案 0 :(得分:2)

这似乎与您的代码(大多数)有效相似:

double GetDouble () {
    double x;
    cin >> x;
    // ver1: while( cin.fail() ) // or !cin.good()   no trailing char check.
    while( cin.fail() || (cin.peek() != '\r' && cin.peek() != '\n'))
    {
        cout << "Invalid Input! Please input a numerical value." << endl;
        cin.clear();
        while( cin.get() != '\n' ); // or cin.ignore(1000, '\n');
        cin >> x;
    }
    return x;
}

答案 1 :(得分:1)

首先,double是一个关键字,因此您不需要在条件语句中使用它。 其次,你可以在while循环中使用cin&gt;&gt; x然后处理x,下面给出了一个示例代码:

    while(cin>>x)
     {
       //process
     }

每当你在while语句中使用任何东西时,它首先检查它的有效性。 例如,如果用户输入一个字符,条件将评估为false,然后您可以告诉用户。通过这种方式,您可以运行循环,直到用户输入正确的输入。 至于break关键字的功能,它会让你走出循环,对于前

    for(int i=10; i>0; i++)
    {
       // do something
    }

将继续保持运行,但假设您将代码重写为:

    for(int i=10; i>0; i++)
    {
      if(i==15)
      break ;
    }

一旦i的值达到15

,循环就会结束

答案 2 :(得分:0)

像这样:

double getDouble(const string& askMessage = "Please Enter a number: ",const string& errorMessage = "Please enter a valid number: ", const int numberOfTrials = 10){
 double userInput = 0.0;
 bool isValidInput = false;
 int trials = 0;
 do{
    cout << endl << askMessage;
    if(cin >> input) break;
    else{ 
      cin.clear(); //EDIT thanks ebyrob, forgot about this.
      std::cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
      std::cout << errorMessage;
    }

 }while(!isValidInput || trials < numberOfTrials);

 return userInput;
}

像这样使用

const double d1 = getDouble();
const double d2 = getDouble("Please Enter a number: ", "Error! Enter a valid number: ", 1000);

答案 3 :(得分:-1)

休息突破循环(在这种情况下,一段时间) cin.clear()清除所有字符的cin缓冲区。 cin.get()从cin获取单个字符(可能是标准的)。