3

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

#include <iostream>

int main()
{
    int n;
    std::cin >> n;
    if (std::cin.fail())
        std::cout << "Something sucks!";
    else  
        std::cout << n;

    return 0;
}
4

4 回答 4

6

尝试:

std::cout << std::numeric_limits<int>::max() << std::endl; // requires you to #include <limits>

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

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

于 2012-11-20T14:13:52.300 回答
0

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

于 2012-11-20T14:19:50.320 回答
0

这可能是因为 big 值太大而无法放入int系统上的类型变量中。尝试将大值分配给您的变量,看看会发生什么。

要修复它,请将变量的类型更改为更广泛的类型,例如longor long long

于 2012-11-20T14:14:01.987 回答
0

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

于 2012-11-20T14:14:08.083 回答