C ++检查数字是否为int / float

时间:2009-04-24 04:51:03

标签: c++

我是新来的。我在google上找到了这个网站。

#include <iostream>

using namespace std;

void main() {

    // Declaration of Variable
    float num1=0.0,num2=0.0;

    // Getting information from users for number 1
    cout << "Please enter x-axis coordinate location : ";
    cin >> num1;

    // Getting information from users for number 2
    cout << "Please enter y-axis coordinate location : ";
    cin >> num2;

    cout << "You enter number 1 : " << num1 << " and number 2 : " << num2 <<endl;

我需要这样的东西,当用户输入字母字符时,会显示一个错误,说你应该输入数字。

任何帮助非常感谢

10 个答案:

答案 0 :(得分:18)

首先,回答你的问题。这实际上非常简单,您无需在代码中进行太多更改:

cout << "Please enter x-axis coordinate location : " << flush;
if (!(cin >> num1)) {
    cout << "You did not enter a correct number!" << endl;
    // Leave the program, or do something appropriate:
    return 1;
}

此代码基本上检查输入是否被有效地解析为浮点数 - 如果没有发生,则表示错误。

其次,main 的返回类型必须 始终int,而不是void

答案 1 :(得分:7)

我使用cin.fail()方法或Boost“lexical_cast”正确使用异常来捕获错误http://www.boost.org/doc/libs/1_38_0/libs/conversion/lexical_cast.htm

答案 2 :(得分:6)

使用类似

的内容
if (static_cast<int>(num1) == num1) {
  // int value
}
else {
  // non-integer value
}

答案 3 :(得分:4)

如果要检查整数/浮点数/输入,则不应将cin用于浮点数。而是将其读入字符串,您可以检查输入是否有效。

如果cin读取无效数字,它将进入失败状态,可以使用if(cin.fail())检查

然而,更容易将输入作为字符串读取,然后将输入转换为整数或浮点数。

应该在不是整数的字符上调用

isdigit(c)。例如isdigit('1')(注意引号)。

您可以使用strtol尝试将字符串转换为整数。根据结果​​,您可以尝试转换为浮点。

答案 4 :(得分:3)

虽然其他人已经回答了这个问题,但我想指出isdigit真正用于什么。它告诉您给定的字符是否代表数字。

基本上,isdigit的定义可能是:

int isdigit (int c)
{
    if (c >= '0' && c <='9')
        return 1;
    else
        return 0;
}

然后,如果您有一个字符串"asdf1234",您可以单独检查每个字符以测试它是否为数字/数字:

char *test = "asdf1234";
int i;

for (i = 0; i < strlen (test); i++)
{
    if (isdigit (test[i]))
        fprintf (stdout, "test[%d] is a digit!\n", i);
}

答案 5 :(得分:2)

将输入输入以适合您使用cin存储的变量。因为您在num1和num2(浮点数)上使用cin,无论用户输入的数字(某种程度),它都是浮点数。

答案 6 :(得分:1)

始终读取字符串中的数字并检查以下内容: -

template <class out_type, class in_type>
out_type convert(in_type const& t)
{
  std::stringstream stream;
  stream << t; // insert value to stream
  // store conversion’s result here
  out_type result;
  stream >> result; // write value to result
  // if there is a failure in conversion the stream will not be empty
  // this is checked by testing the eof bit
  if (! stream.eof() ) // there can be overflow also
  { // a max value in case of conversion error
    result = std::numeric_limits<out_type>::max();
  }
  return result;
}

用作

int iValue = convert<int>(strVal);
if (std::numeric_limits<int>::max() == iValue)
{
  dValue = convert<double>(strVal);
}

这是一种现代的方式: - )

答案 7 :(得分:0)

您可以将输入存储到字符串中,然后创建如下函数:

bool GetInt(const char *string, int *out)
{
    char *end;

    if (!string)
        return false;

    int ret_int = strtoul(string, &end, 10);

    if (*end)
        return false;

    *out = ret_int;
    return true;
}

GetInt(“1234”,&amp; somevariable)返回true并将somevarset设置为1234.GetInt(“abc”,&amp; somevariable)和GetInt(“1234aaaa”,&amp; somevariable)都返回false。这是浮动的版本:

HOT RESULT_MUST_BE_CHKED NONNULL bool GetFloat(const char *string, float *out)
{
    char *end;

    if (!string)
        return false;

    float ret_float = (float)strtod(string, &end);

    if (*end)
        return false;

    *out = ret_float;
    return true;
}

答案 8 :(得分:0)

//Just do a type cast check
if ((int)(num1) == num1){
//Statements
}

答案 9 :(得分:0)

我想验证输入,并且需要确保输入的值是数字,以便它可以存储在数字变量中。最后这项工作对我来说(来源:http://www.cplusplus.com/forum/beginner/2957/

int number;
do{
      cout<<"enter a number"<<endl;
      cin>>number;
      if ((cin.fail())) {
         cout<<"error: that's not a number!! try again"<<endl;
         cin.clear(); // clear the stream
         //clear the buffer to avoid loop (this part was what I was missing)
         cin.ignore(std::numeric_limits<int>::max(),'\n');
         cout<<"enter a number"<<endl; //ask again
         cin>>number;
      }

 } while (cin.fail());