我试过查看我的代码,但我找不到问题。我做错了什么 ?虽然我认为它导致了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;
}
答案 0 :(得分:3)
因为%60
,s
将始终是0到59之间的整数(包括)。在下一行,s/60
将永远是&lt; 1,因此它被截断为0
,因为它是整数除法。将ats
除以此结果除以0
答案 1 :(得分:2)
整数除以零。这是C ++中未定义的行为。
由于模数, s
从不大于59。
s / 60
将始终为零,因为整数除法截断。
答案 2 :(得分:2)
行l=ats/(s/60);
中的整数除零。 s
和60
都是整数,因此当您使用整数除法划分s=10
和60
时,您会获得0
,并且当您划分ats
时0
你得到了一个崩溃。如果要在这种情况下避免整数除法,请使用:
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
除以零。