是什么让这个程序崩溃?

时间:2015-11-05 14:48:16

标签: c++ crash

我试过查看我的代码,但我找不到问题。我做错了什么 ?虽然我认为它导致了l=ats/(s/60)

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int ats=7,v1=12,v2=12,m1=30,m2=40,g=70,l,s;
s=abs(((v2*60+m2)-(v1*60+m1))%60);
l=ats/(s/60);
cout << l;
return 0;
}

4 个答案:

答案 0 :(得分:3)

因为%60s将始终是0到59之间的整数(包括)。在下一行,s/60将永远是&lt; 1,因此它被截断为0,因为它是整数除法。将ats除以此结果除以0

答案 1 :(得分:2)

整数除以零。这是C ++中未定义的行为。

由于模数,

s 从不大于59。

s / 60将始终为零,因为整数除法截断

答案 2 :(得分:2)

l=ats/(s/60);中的整数除零。 s60都是整数,因此当您使用整数除法划分s=1060时,您会获得0,并且当您划分ats0你得到了一个崩溃。如果要在这种情况下避免整数除法,请使用:

a)l=ats/(s/60.0);

b)l=ats/(static_cast<double> (s)/60);

但请注意,在此更改后,结果将不再是int类型。如果您想在那里使用int,则需要使用int再次将其强制转换回static_cast<int>,如下所示:l=static_cast<int> (ats/(s/60.0))

答案 3 :(得分:1)

s是小于60的整数。整数除(s/60)给出0。因此,ats除以零。