是否有用户可以输入的最大 int 长度?

Is there a max int length a user can input?

我编写了一个小程序来确定用户提供的整数的长度:

#include <iostream>

using namespace std;

int main()
{
    int c=0; //counter for loop
    int q=1; //quotient of number upon division

    cout << "Hello Cerberus! Please enter a number." << endl;
    cin >> q;

    if(q > -10 && q < 10)
    {
        cout << "The number you entered is 1 digit long." << endl;
    }
    else
    {
        while(q != 0)
        {
            q=q/10;
            c++;
        }

        cout << "The number you entered is " << c << " digits long." << endl;
    }
    return 0;
}

它工作得很好,除非数字变得太大。一旦输入长度为 13 位左右,程序默认为 "The number you entered is 1 digit long"(除非数字在 -10 到 10 之间,否则它甚至不应该显示该解决方案)。

用户输入的整数是否有长度限制,或者这是否表明我的计算机内存限制?

这是您计算机体系结构的限制。每个数字类型都有一个固定的上限,因为该类型描述了具有固定大小的数据。例如,您的 int 可能会在内存中占用四个或八个字节(取决于 CPU;根据您的观察,我会说前者),并且只有这么多组合可以存储在这么多字节内存中的位数。

您可以使用 std::numeric_limits 在您的平台上确定 int 的范围,但我个人建议坚持使用固定宽度的类型别名(例如 int32_tint64_t) 并选择范围足以满足您的应用需求的那些。

或者,确实存在所谓的 "bigint" 库,它们本质上是 类 包装整数数组并添加巧妙的功能以使任意大的值像算术类型一样工作。不过,这对你来说可能有点过头了。

只是不要试图开始使用浮点类型(floatdouble)来获得魔法射程增强能力;就像整数类型一样,它们的精度从根本上是有限的,但使用浮点类型会增加额外的问题和顾虑。

不过,用户输入没有基本限制。那是因为您的流正在转换文本字符,并且您的流基本上可以包含您可以想象的尽可能多的文本字符。在那个级别,您实际上只受可用内存的限制。