#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中运行时,问题不存在。
答案 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