为什么当我们将输入作为 long int 类型时 while 循环终止?

why while loop terminate when we take input as long int type?

在这个程序中,当我给出大于 10^10 的值时,循环终止并给出错误的输出。

#include<iomanip>
#include<iostream>
#include<cmath>
#include<cstdlib>
#include<vector>
using namespace std;
int main()
{
    vector<long int>v;
    long int  x;
    int i=5;
    while(i)
        {
            cin>>x;
            v.push_back(x);
            i--;
        }
    for(long int i=v.size()-1;i>=0;i--)
        {

            cout<<fixed<<setprecision(4)<<sqrt(v[i])<<endl;
        }
    return 0;
}

显然您超出了 long 的值范围。

标准保证 long 至少有 32 位。因为 210 = 1024 = 大约 1000,所以 232 = 22 × (210)3 = 大约 4 × 109 个值。其中一半是负数,所以最小位数的上限大概是2×109.

使用 64 位实现 long 你不会超出它的范围(你能快速计算出大概的范围吗?)。


关于

When I am giving value larger than 10^10 ,loop terminate itself

不,循环不会终止。但是由于输入操作失败 cin 处于失败模式,这会导致所有进一步的输入操作被忽略。

这是因为您超出了 Long int 的最大限制,这 table 可能会有所帮助。

char 1 字节 -128 到 127 或 0 到 255

unsigned char 1 字节 0 到 255

signed char 1 字节 -128 到 127

int 2 或 4 字节 -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647

unsigned int 2 或 4 字节 0 到 65,535 或 0 到 4,294,967,295

短 2 个字节 -32,768 到 32,767

unsigned short 2 字节 0 到 65,535

long 4 字节 -2,147,483,648 到 2,147,483,647

unsigned long 4 字节 0 到 4,294,967,295

在您的代码中尝试 long long int 可能会起作用。这可能有用我不知道它的范围。