2016-03-09 28 views
0

我知道unsigned long高达4294967295而已,所以这里是我的问题,当用户输入多的数字(如结果是要超过上限值)转换后的数字将是多么4294967295。 例如:转化基地11十进制

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("aA"); 
    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"; 

程序应该说“超出范围”如果结果将超过4294967295 对不起我只是个初学者。

+0

[性病:: strtoul将(http://en.cppreference.com/w/cpp/string/byte/strtoul)将让你知道,如果有一个误差范围。需要我们 – wally

+1

*** *** VB6.0我想你指的Visual C++ 6.0。该代码不是Visual Basic。 – drescherjm

+0

@drescherjm幸运的代码兼容。 –

回答

2

strtoul docs on www.cplusplus.com

如果读出的值超出表示的值的范围的由一个无符号长整型,该函数返回ULONG_MAX(在<climits>定义),和errno设置为ERANGE 。

您应该检查errno为确定值超出范围。