C++类型转换错误/

C++ Type conversion error /

本文关键字:错误 类型转换 C++      更新时间:2023-10-16

我需要一个函数来检查输入值是否适合变量(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函数中,但我该如何纠正?编译器在运行时显示错误消息"std::invalid_argument at memory location 0x0051F520"。

此外,在您的代码中,您只是在检查字符串是否只有数字。您还应该检查这个数字是否适合无符号长-长。(2至电源64)在这里,您可以找到C++中不同类型的最大值/最小值。

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

所示代码中的input_st始终是一个空字符串,无法转换为整数值,因此引发异常。

显示错误消息的不是编译器。报告的错误消息是运行时错误,由抛出的异常引起。

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