我需要一个函数来检查输入值是否适合变量(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。跑步时。
答案 0 :(得分:1)
此外,在您的代码中,您只是检查字符串是否只有数字。 您还应该检查此数字是否适合未签名的long long。 (2到64) Here您可以在C ++中找到不同类型的最大/最小值。
答案 1 :(得分:0)
如果您不愿查看stoull()
的文档,如果传递的字符串无法转换为std::invalid_argument
,您会发现它会抛出unsigned long long
。
input_st
始终为空字符串,无法转换为整数值,因此抛出异常。
显示错误消息的不是编译器。报告的错误消息是由于抛出异常而导致的运行时错误。
与您的问题无关,如果input_st
不知何故是一个不包含数字的非空字符串,该函数将递归调用自身。这是无效的逻辑。