cin>>没有更大的数字,但适用于较小的数字?

时间:2012-11-20 14:08:39

标签: c++ cin

为什么cin失败,当我输入如下数字时:1 3999999999但它适用于较小的数字,如:1 5?

int main()
{
    int N, X;
    cout << sizeof(int);

    cout << "Please enter two numbers: ";
    cin >> N >> X;

    vector <int> numbers = vector<int>();

    int currentNumber;

    cout << "Please enter list of numbers: ";
    for ( int i = 0; i < N; i++ )
    {
        cin >> currentNumber;
        if (cin.fail())
            cout << "Something sucks!";
        numbers.push_back(currentNumber);
    }

    sort(numbers.begin(), numbers.end(), Compare(X));

    cout << "The list is now: " << endl;
    for (int i = 0; i < N; i++)
    {
        cout << numbers[i] << " ";
    }
    cout << endl;

    return 0;
}

它只是跳过了这一步。

4 个答案:

答案 0 :(得分:4)

尝试:

std::cout << std::numeric_limits<int>::max() << std::endl; // requires you to #include <limits>
您系统上的

int可能是32位带符号的二进制补码数,这意味着它可以表示的最大值为2,147,483,647。您的号码3,999,999,999大于此号码,int无法正确表示。 cin失败,提醒您这个问题。

long可能是您系统上的64位整数,如果是,请尝试。您需要一个64位整数来表示3,999,999,999。或者,您可以使用unsigned int,它将能够表示大到4,294,967,295的数字(同样,在典型系统上)。当然,这意味着你不能代表负数,所以这是一种权衡。

答案 1 :(得分:0)

这可能是因为大值太大而无法适应系统中int类型的变量。尝试将大值赋给变量,看看会发生什么。

要解决此问题,请将变量类型更改为更宽的类型,例如longlong long

答案 2 :(得分:0)

int可表示的最大数量取决于它所代表的位数。通常,它是32位,即。最大数量为2147483647,小于您输入的数字。

答案 3 :(得分:0)

当格​​式化的输入函数以某种形式失败时,它们会设置std::ios_base::failbit并保持参数中的原始值不变。有不同的故障和溢出被认为是一种失败。我记得有关不同错误的讨论以不同的方式表达,但我不记得结果。最好的办法是确保在调用任何输入功能之前清除errno并检查errno ERANGE以区分溢出和格式错误。