输入较大数字时,为什么程序会到达文件末尾?

时间:2018-10-17 01:46:27

标签: c++ c++11 overflow

int main()
{
    int sum = 0, value = 0;
    while (std::cin >> value)
        sum += value;
    std::cout << "Sum is: " << sum << std::endl;
    return 0;
}

因此,此代码从用户那里获取值并将其添加。我不明白是什么使它到达文件结尾。我对其进行了多次测试,发现当我使用较大的数字(9999999999)时,结束速度更快,但是当我输入1时,它永远不会结束。

2 个答案:

答案 0 :(得分:2)

您正在遇到整数溢出。

更具体地说,std::istream上的bool运算符返回false,因为流未能将大值读取到int中。

答案 1 :(得分:0)

布雷克。问题在于整数实际上只能如此之大。常规int的范围是-32,767到32,767; long int的范围是-2,147,483,647到2,147,483,647,依此类推。我确定在线上有一个列表,您可以在其中找到不同的范围(我不记得这些了)。

无论如何,我相信您的问题是您的int sum太大了,并且正在破坏您的程序。此外,我建议您采用一种方法来结束您的while循环,以使您的程序永远不会继续运行;您可以使用类似if(value == -1) break;

的方法来执行此操作

享受你的学业!