c++ - cin >> 对较大的数字失败但对较小的数字有效?

标签 c++ cin

为什么 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;
}

最佳答案

尝试:

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 的数字(同样,在典型系统上)。当然,这意味着您不能表示负数,所以这是一种权衡。

关于c++ - cin >> 对较大的数字失败但对较小的数字有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13474989/

相关文章:

c++ - 绕过 cin 语句的未初始化局部变量

c++ - 如何使用 cin 处理以下类型的输入?

c++ - g++ 不采用的可变参数推导指南,clang++ 采用 - 谁是正确的?

c++ - 是否可以调用一个以 const 右值作为参数的函数?

C++ getline cin 问题

C++ - 使用 cin 运行 while 循环后,程序将不再接受输入

c++ - 收到输入并测试它是否是 C++ 中的 int 后的无限循环

c++ - 为什么使用 std::async 时通过 const ref 传递速度较慢

c++ - 在gcc编译器中初始化迭代器错误C++

c++ - 在没有大条件 block 的情况下更改比较运算符