C ++类型转换错误/

时间:2015-03-03 12:18:28

标签: c++ types

我需要一个函数来检查输入值是否适合变量(unsigned long long)。如果它没有,程序应该要求用户再次输入值(直到输入有效值)。我试过了:

unsigned long long CheckInput()
{
    string input_st;
    cin>>input_st;
    for (int i = 0; i < input_st.length(); i++){
        if (input_st[i] >= '0' && input_st[i] <= '9');
        else { cout << "Error. Please try again  ";
            CheckInput();
        }
    }

    return stoull(input_st);
}

它不起作用。问题似乎在于stoull功能,但我该如何纠正呢?编译器在内存位置0x0051F520&#34;显示错误消息&#34; std :: invalid_argument。跑步时。

2 个答案:

答案 0 :(得分:1)

此外,在您的代码中,您只是检查字符串是否只有数字。 您还应该检查此数字是否适合未签名的long long。 (2到64) Here您可以在C ++中找到不同类型的最大/最小值。

答案 1 :(得分:0)

如果您不愿查看stoull()的文档,如果传递的字符串无法转换为std::invalid_argument,您会发现它会抛出unsigned long long

显示的代码中的

input_st始终为空字符串,无法转换为整数值,因此抛出异常。

显示错误消息的不是编译器。报告的错误消息是由于抛出异常而导致的运行时错误。

与您的问题无关,如果input_st不知何故是一个不包含数字的非空字符串,该函数将递归调用自身。这是无效的逻辑。