由cin引起的运行时错误

Runtime error caused by cin?

本文关键字:运行时错误 cin      更新时间:2023-10-16
#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>> giant_number"在在线判断上导致运行时错误,只要删除这行代码就可以成功运行而不会出现运行时错误。我真的不明白为什么一个"cin"代码会导致运行时错误。同时,当我在Xcode中运行它时,问题不存在。

您从未检查您的输入是否成功。如果输入一个非数字,尝试读取一个整数将失败,您将得到一些奇怪的值。确保您验证输入是成功的,并且根据值的使用方式,在相同的范围内,例如:

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

还请注意,你发布的代码不是c++: c++中没有动态大小的数组。

数字类型的变量存储在内存中。例如,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不是标准的,因此我建议阅读这篇文章:c++中的固定宽度整数

阅读更多:http://msdn.microsoft.com/en-us/library/s3f49ktz.aspx