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

时间:2017-01-27 04:27:31

标签: c++ loops vector long-integer

在这个程序中,当我给出的值大于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;
}

2 个答案:

答案 0 :(得分:3)

显然你超出了long的价值范围。

该标准保证long至少32位。由于2 10 = 1024 =大约1000,所以2 32 = 2 2 ×(2 10 3 =大约4×10 9 值。其中一半为负数,因此最小位数的上限值约为2×10 9

使用64位long的实现,您不会超出其范围(您能快速计算近似范围吗?)。

关于

  

当我给出大于10 ^ 10的值时,循环终止

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

答案 1 :(得分:-1)

这是因为你超过了Long int的最大限制,这个表可能会有所帮助。

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

unsigned char 1 byte 0 to 255

签名字符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

无符号短2字节0到65,535

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

无符号长4字节0到4,294,967,295

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