我知道unsigned long
仅限于4294967295,所以这是我的问题,当用户输入多个数字时(比如结果将超出限制),转换的数字将是只是4294967295。
例如:
Base 11: 1928374192847
Decimal: 4294967295
结果应该是5777758712535.如何修复此限制? vb6.0需要我们。 这是我的代码:
cout << "\t\t CONVERSION\n";
cout << "\t Base 11 to Decimal\n";
cout << "\nBase 11: ";
cin >> str;
const auto x = str.find_first_not_of("0123456789aA");
if (x != string::npos)
{
std::cout << "Invalid Input\n\n";
goto a;
}
unsigned long x = strtoul(str.c_str(), NULL, 11);
cout << "Decimal: " << x << "\n\n";
该计划应该说&#34;超出范围&#34;如果结果将超过4294967295。 对不起,我只是一个初学者。
答案 0 :(得分:2)
来自strtoul docs on www.cplusplus.com :
如果读取的值超出unsigned long int的可表示值范围,则函数返回ULONG_MAX(在&lt; climits&gt;中定义),并且errno设置为ERANGE。
您应该检查错误以确定该值是否超出范围。