由cin引起的运行时错误?

时间:2014-06-01 11:36:26

标签: c++

#include <iostream>
using namespace std;
int main(){
int N,unit_distance,total_distance,gas_number,sum_of_distance,giant_number,temp;
bool reach;
cin >> N;

for (int all=0;all<N;all++)
{

    reach =true;
    sum_of_distance=0;
    cin >> unit_distance >> total_distance >> gas_number;

    int gas[gas_number+1];
    for (int i=0;i<gas_number;i++)
        cin >> gas[i];
    gas[gas_number] = total_distance;


    // cin >> giant_number;


}

return 0;
}

这是我的问题代码的一部分。问题是“cin&gt;&gt; giant_number”行在Online Judge上导致运行时错误,只要删除此行,代码就可以成功运行而不会出现运行时错误。我真的无法理解为什么单个“cin”代码会导致运行时错误。同时,当我在Xcode中运行时,问题不存在。

2 个答案:

答案 0 :(得分:1)

您永远不会检查您的输入是否成功。如果输入了非数字,则尝试读取整数将失败,并且您将获得一些奇怪的值。确保验证输入是否成功,并且取决于值的使用方式,它们处于合理的范围内,例如:

if (std::cin >> gas_number && gas_number < max_gas_number) {
    std::vector<int> gas(gas_number + 1);
    // ...
}

另请注意,您发布的代码不是C ++:C ++中没有动态大小的数组。

答案 1 :(得分:0)

数字类型的变量存储在您的内存中。例如,int以4个字节存储,并具有一系列可能的值:

–2,147,483,648 to 2,147,483,647

我相信你输入的数字太大而且溢出了这个类型。如果范围不够,您可以使用__int64,其中包含一系列可能的值,如下所示:

–9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

因为它以8个字节存储。

__int64不标准,因此我建议您阅读以下文章:Fixed-width integers in C++

在此处阅读更多内容:http://msdn.microsoft.com/en-us/library/s3f49ktz.aspx